The code is actually relatively simple, the most important thing is to read the book carefully and understand the process well.
package com.slp.cryptography.des;
/**
* @ClassName DesSubKey
* @Description TODO
* @Author sanglp
* @Date 2021/1/11 13:18
* @Version 1.0
**/
public class DesSubKey {
public static void main(String[] args) {
int a[] = {
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1};
int b[] = new int[56], i, j, n, t, x, y;
int C[] = new int[56];
int D[] = new int[56];
int k[] = new int[56];
//进行第一轮置换
b[0] = a[56];
b[1] = a[48];
b[2] = a[40];
b[3] = a[32];
b[4] = a[24];
b[5] = a[16];
b[6] = a[8];
b[7] = a[0];
b[8] = a[57];
b[9] = a[49];
b[10] = a[41];
b[11] = a[33];
b[12] = a[25];
b[13] = a[17];
b[14] = a[9];
b[15] = a[1];
b[16] = a[58];
b[17] = a[50];
b[18] = a[42];
b[19] = a[34];
b[20] = a[26];
b[21] = a[18];
b[22] = a[10];
b[23] = a[2];
b[24] = a[59];
b[25] = a[51];
b[26] = a[43];
b[27] = a[35];
b[28] = a[62];
b[29] = a[54];
b[30] = a[46];
b[31] = a[38];
b[32] = a[30];
b[33] = a[22];
b[34] = a[14];
b[35] = a[6];
b[36] = a[61];
b[37] = a[53];
b[38] = a[45];
b[39] = a[37];
b[40] = a[29];
b[41] = a[21];
b[42] = a[13];
b[43] = a[5];
b[44] = a[60];
b[45] = a[52];
b[46] = a[44];
b[47] = a[36];
b[48] = a[28];
b[49] = a[20];
b[50] = a[12];
b[51] = a[4];
b[52] = a[27];
b[53] = a[19];
b[54] = a[11];
b[55] = a[3];
// for(i=0;i<56;i++)
// {
//printf("%d ",b[i]);
//}
//printf("\n");
//输出C0 D0
System.out.print("C0=");
for (i = 0; i < 28; i++) {
C[i] = b[i];
if (i % 4 == 0) {
System.out.print(" ");
}
System.out.print(C[i]);
}
System.out.print("\nD0=");
for (i = 28; i < 56; i++) {
D[i - 28] = b[i];
if (i % 4 == 0) {
System.out.print(" ");
}
System.out.print(D[i - 28]);
}
System.out.print("\n\n");
//置换16次
for (j = 1; j <= 16; j++) {
System.out.println("第"+j+"次子秘钥");
if (j == 1 || j == 2 || j == 9 || j == 16) {
n = C[0];
t = D[0];
for (i = 0; i < 27; i++) {
C[i] = C[i + 1];
D[i] = D[i + 1];
}
C[27] = n;
D[27] = t;
} else {
n = C[1];
t = C[0];
x = D[1];
y = D[0];
for (i = 0; i < 26; i++) {
C[i] = C[i + 2];
D[i] = D[i + 2];
}
C[27] = n;
C[26] = t;
D[27] = x;
D[26] = y;
}
for (i = 0; i < 28; i++) {
if (i % 4 == 0) {
System.out.print(" ");
}
System.out.print(C[i]);
}
System.out.print("\n");
for (i = 0; i < 28; i++) {
if (i % 4 == 0) {
System.out.print(" ");
}
System.out.print(D[i]);
}
System.out.print("\n");
for (i = 0; i < 28; i++) {
b[i] = C[i];
}
for (i = 28; i < 56; i++) {
b[i] = D[i - 28];
}
k[0] = b[13];
k[1] = b[16];
k[2] = b[10];
k[3] = b[23];
k[4] = b[0];
k[5] = b[4];
k[6] = b[2];
k[7] = b[27];
k[8] = b[14];
k[9] = b[5];
k[10] = b[20];
k[11] = b[9];
k[12] = b[22];
k[13] = b[18];
k[14] = b[11];
k[15] = b[3];
k[16] = b[25];
k[17] = b[7];
k[18] = b[15];
k[19] = b[6];
k[20] = b[26];
k[21] = b[19];
k[22] = b[12];
k[23] = b[1];
k[24] = b[40];
k[25] = b[51];
k[26] = b[30];
k[27] = b[36];
k[28] = b[46];
k[29] = b[54];
k[30] = b[29];
k[31] = b[39];
k[32] = b[50];
k[33] = b[44];
k[34] = b[32];
k[35] = b[47];
k[36] = b[43];
k[37] = b[48];
k[38] = b[38];
k[39] = b[55];
k[40] = b[33];
k[41] = b[52];
k[42] = b[45];
k[43] = b[41];
k[44] = b[49];
k[45] = b[35];
k[46] = b[28];
k[47] = b[31];
for (i = 0; i < 48; i++) {
if (i % 4 == 0) {
System.out.print(" ");
}
System.out.print(k[i]);
}
System.out.print("\n");
System.out.print("\n");
}
}
}
Search [Zixin] on WeChat or scan the QR code below to make friends and make progress together. The article is continuously updated. At present, I am organizing the study notes of Python hundred battles, and I look forward to more updates in the future.