📄 des.cpp
字号:
int afterS1[4]; int afterS5[4];
int afterS2[4]; int afterS6[4];
int afterS3[4]; int afterS7[4];
int afterS4[4]; int afterS8[4];
int afterS[32];
int temp;
//E拓展后明文与密钥异或
for (int i = 0; i < 48; i++)
{
if (afterE[i] != k[i]) afterE[i] = 1; else afterE[i] = 0;
}
//将明文分组
for (i = 0; i < 6; i++)
{
m1[i] = afterE[i];
m2[i] = afterE[i + 6];
m3[i] = afterE[i + 12];
m4[i] = afterE[i + 18];
m5[i] = afterE[i + 24];
m6[i] = afterE[i + 30];
m7[i] = afterE[i + 36];
m8[i] = afterE[i + 42];
}
//6组明文分别经过S盒后各自输出为afterS1...afterS8
temp = getS(m1, 1);
if ((temp & 0x8) != 0) afterS1[0] = 1;
if ((temp & 0x4) != 0) afterS1[1] = 1;
if ((temp & 0x2) != 0) afterS1[2] = 1;
if ((temp & 0x1) != 0) afterS1[3] = 1;
temp = getS(m2, 2);
if ((temp & 0x8) != 0) afterS2[0] = 1;
if ((temp & 0x4) != 0) afterS2[1] = 1;
if ((temp & 0x2) != 0) afterS2[2] = 1;
if ((temp & 0x1) != 0) afterS2[3] = 1;
temp = getS(m3, 3);
if ((temp & 0x8) != 0) afterS3[0] = 1;
if ((temp & 0x4) != 0) afterS3[1] = 1;
if ((temp & 0x2) != 0) afterS3[2] = 1;
if ((temp & 0x1) != 0) afterS3[3] = 1;
temp = getS(m4, 4);
if ((temp & 0x8) != 0) afterS4[0] = 1;
if ((temp & 0x4) != 0) afterS4[1] = 1;
if ((temp & 0x2) != 0) afterS4[2] = 1;
if ((temp & 0x1) != 0) afterS4[3] = 1;
temp = getS(m5, 5);
if ((temp & 0x8) != 0) afterS5[0] = 1;
if ((temp & 0x4) != 0) afterS5[1] = 1;
if ((temp & 0x2) != 0) afterS5[2] = 1;
if ((temp & 0x1) != 0) afterS5[3] = 1;
temp = getS(m6, 6);
if ((temp & 0x8) != 0) afterS6[0] = 1;
if ((temp & 0x4) != 0) afterS6[1] = 1;
if ((temp & 0x2) != 0) afterS6[2] = 1;
if ((temp & 0x1) != 0) afterS6[3] = 1;
temp = getS(m7, 7);
if ((temp & 0x8) != 0) afterS7[0] = 1;
if ((temp & 0x4) != 0) afterS7[1] = 1;
if ((temp & 0x2) != 0) afterS7[2] = 1;
if ((temp & 0x1) != 0) afterS7[3] = 1;
temp = getS(m8, 8);
if ((temp & 0x8) != 0) afterS8[0] = 1;
if ((temp & 0x4) != 0) afterS8[1] = 1;
if ((temp & 0x2) != 0) afterS8[2] = 1;
if ((temp & 0x1) != 0) afterS8[3] = 1;
//合并经过S盒后的明文
for (i = 0; i < 4; i++)
{
afterS[i] = afterS1[i];
afterS[i + 4] = afterS2[i];
afterS[i + 8] = afterS3[i];
afterS[i + 12] = afterS4[i];
afterS[i + 16] = afterS5[i];
afterS[i + 20] = afterS6[i];
afterS[i + 24] = afterS7[i];
afterS[i + 28] = afterS8[i];
}
//P置换
greturn[0] = afterS[15];
greturn[1] = afterS[6];
greturn[2] = afterS[19];
greturn[3] = afterS[20];
greturn[4] = afterS[28];
greturn[5] = afterS[11];
greturn[6] = afterS[27];
greturn[7] = afterS[16];
greturn[8] = afterS[0];
greturn[9] = afterS[14];
greturn[10] = afterS[22];
greturn[11] = afterS[25];
greturn[12] = afterS[4];
greturn[13] = afterS[17];
greturn[14] = afterS[30];
greturn[15] = afterS[9];
greturn[16] = afterS[1];
greturn[17] = afterS[7];
greturn[18] = afterS[23];
greturn[19] = afterS[13];
greturn[20] = afterS[31];
greturn[21] = afterS[26];
greturn[22] = afterS[2];
greturn[23] = afterS[8];
greturn[24] = afterS[18];
greturn[25] = afterS[12];
greturn[26] = afterS[29];
greturn[27] = afterS[5];
greturn[28] = afterS[21];
greturn[29] = afterS[10];
greturn[30] = afterS[3];
greturn[31] = afterS[24];
}
//获得S盒的值
int DES::getS(int Mi[], int i)
{
//初始化8个S盒
int S1[4][16]; int S2[4][16];
int S3[4][16]; int S4[4][16];
int S5[4][16]; int S6[4][16];
int S7[4][16]; int S8[4][16];
int output[8];
int j, k;
//8个S盒
S1[0][0] = 14;
S1[0][1] = 4;
S1[0][2] = 13;
S1[0][3] = 1;
S1[0][4] = 2;
S1[0][5] = 15;
S1[0][6] = 11;
S1[0][7] = 8;
S1[0][8] = 3;
S1[0][9] = 10;
S1[0][10] = 6;
S1[0][11] = 12;
S1[0][12] = 5;
S1[0][13] = 9;
S1[0][14] = 0;
S1[0][15] = 7;
S1[1][0] = 0;
S1[1][1] = 15;
S1[1][2] = 7;
S1[1][3] = 4;
S1[1][4] = 14;
S1[1][5] = 2;
S1[1][6] = 13;
S1[1][7] = 1;
S1[1][8] = 10;
S1[1][9] = 6;
S1[1][10] = 12;
S1[1][11] = 11;
S1[1][12] = 9;
S1[1][13] = 5;
S1[1][14] = 3;
S1[1][15] = 8;
S1[2][0] = 4;
S1[2][1] = 1;
S1[2][2] = 14;
S1[2][3] = 8;
S1[2][4] = 13;
S1[2][5] = 6;
S1[2][6] = 2;
S1[2][7] = 11;
S1[2][8] = 15;
S1[2][9] = 12;
S1[2][10] = 9;
S1[2][11] = 7;
S1[2][12] = 3;
S1[2][13] = 10;
S1[2][14] = 5;
S1[2][15] = 0;
S1[3][0] = 15;
S1[3][1] = 12;
S1[3][2] = 8;
S1[3][3] = 2;
S1[3][4] = 4;
S1[3][5] = 9;
S1[3][6] = 1;
S1[3][7] = 7;
S1[3][8] = 5;
S1[3][9] = 11;
S1[3][10] = 3;
S1[3][11] = 14;
S1[3][12] = 10;
S1[3][13] = 0;
S1[3][14] = 6;
S1[3][15] = 13;
S2[0][0] = 15;
S2[0][1] = 1;
S2[0][2] = 8;
S2[0][3] = 14;
S2[0][4] = 6;
S2[0][5] = 11;
S2[0][6] = 3;
S2[0][7] = 4;
S2[0][8] = 9;
S2[0][9] = 7;
S2[0][10] = 2;
S2[0][11] = 13;
S2[0][12] = 12;
S2[0][13] = 0;
S2[0][14] = 5;
S2[0][15] = 10;
S2[1][0] = 3;
S2[1][1] = 13;
S2[1][2] = 4;
S2[1][3] = 7;
S2[1][4] = 15;
S2[1][5] = 2;
S2[1][6] = 8;
S2[1][7] = 14;
S2[1][8] = 12;
S2[1][9] = 0;
S2[1][10] = 1;
S2[1][11] = 10;
S2[1][12] = 6;
S2[1][13] = 9;
S2[1][14] = 11;
S2[1][15] = 5;
S2[2][0] = 0;
S2[2][1] = 14;
S2[2][2] = 7;
S2[2][3] = 11;
S2[2][4] = 10;
S2[2][5] = 4;
S2[2][6] = 13;
S2[2][7] = 1;
S2[2][8] = 5;
S2[2][9] = 8;
S2[2][10] = 12;
S2[2][11] = 6;
S2[2][12] = 9;
S2[2][13] = 3;
S2[2][14] = 2;
S2[2][15] = 15;
S2[3][0] = 13;
S2[3][1] = 8;
S2[3][2] = 10;
S2[3][3] = 1;
S2[3][4] = 3;
S2[3][5] = 15;
S2[3][6] = 4;
S2[3][7] = 2;
S2[3][8] = 11;
S2[3][9] = 6;
S2[3][10] = 7;
S2[3][11] = 12;
S2[3][12] = 0;
S2[3][13] = 5;
S2[3][14] = 14;
S2[3][15] = 9;
S3[0][0] = 10;
S3[0][1] = 0;
S3[0][2] = 9;
S3[0][3] = 14;
S3[0][4] = 6;
S3[0][5] = 3;
S3[0][6] = 15;
S3[0][7] = 5;
S3[0][8] = 1;
S3[0][9] = 13;
S3[0][10] = 12;
S3[0][11] = 7;
S3[0][12] = 11;
S3[0][13] = 4;
S3[0][14] = 2;
S3[0][15] = 8;
S3[1][0] = 13;
S3[1][1] = 7;
S3[1][2] = 0;
S3[1][3] = 9;
S3[1][4] = 3;
S3[1][5] = 4;
S3[1][6] = 6;
S3[1][7] = 10;
S3[1][8] = 2;
S3[1][9] = 8;
S3[1][10] = 5;
S3[1][11] = 14;
S3[1][12] = 12;
S3[1][13] = 11;
S3[1][14] = 15;
S3[1][15] = 1;
S3[2][0] = 13;
S3[2][1] = 6;
S3[2][2] = 4;
S3[2][3] = 9;
S3[2][4] = 8;
S3[2][5] = 15;
S3[2][6] = 3;
S3[2][7] = 0;
S3[2][8] = 11;
S3[2][9] = 1;
S3[2][10] = 2;
S3[2][11] = 12;
S3[2][12] = 5;
S3[2][13] = 10;
S3[2][14] = 14;
S3[2][15] = 7;
S3[3][0] = 1;
S3[3][1] = 10;
S3[3][2] = 13;
S3[3][3] = 0;
S3[3][4] = 6;
S3[3][5] = 9;
S3[3][6] = 8;
S3[3][7] = 7;
S3[3][8] = 4;
S3[3][9] = 15;
S3[3][10] = 14;
S3[3][11] = 3;
S3[3][12] = 11;
S3[3][13] = 5;
S3[3][14] = 2;
S3[3][15] = 12;
S4[0][0] = 7;
S4[0][1] = 13;
S4[0][2] = 14;
S4[0][3] = 3;
S4[0][4] = 0;
S4[0][5] = 6;
S4[0][6] = 9;
S4[0][7] = 10;
S4[0][8] = 1;
S4[0][9] = 2;
S4[0][10] = 8;
S4[0][11] = 5;
S4[0][12] = 11;
S4[0][13] = 12;
S4[0][14] = 4;
S4[0][15] = 15;
S4[1][0] = 13;
S4[1][1] = 8;
S4[1][2] = 11;
S4[1][3] = 5;
S4[1][4] = 6;
S4[1][5] = 15;
S4[1][6] = 0;
S4[1][7] = 3;
S4[1][8] = 4;
S4[1][9] = 7;
S4[1][10] = 2;
S4[1][11] = 12;
S4[1][12] = 1;
S4[1][13] = 10;
S4[1][14] = 14;
S4[1][15] = 9;
S4[2][0] = 10;
S4[2][1] = 6;
S4[2][2] = 9;
S4[2][3] = 0;
S4[2][4] = 12;
S4[2][5] = 11;
S4[2][6] = 7;
S4[2][7] = 13;
S4[2][8] = 15;
S4[2][9] = 1;
S4[2][10] = 3;
S4[2][11] = 14;
S4[2][12] = 5;
S4[2][13] = 2;
S4[2][14] = 8;
S4[2][15] = 4;
S4[3][0] = 3;
S4[3][1] = 15;
S4[3][2] = 0;
S4[3][3] = 6;
S4[3][4] = 10;
S4[3][5] = 1;
S4[3][6] = 13;
S4[3][7] = 8;
S4[3][8] = 9;
S4[3][9] = 4;
S4[3][10] = 5;
S4[3][11] = 11;
S4[3][12] = 12;
S4[3][13] = 7;
S4[3][14] = 2;
S4[3][15] = 14;
S5[0][0] = 2;
S5[0][1] = 12;
S5[0][2] = 4;
S5[0][3] = 1;
S5[0][4] = 7;
S5[0][5] = 10;
S5[0][6] = 11;
S5[0][7] = 6;
S5[0][8] = 8;
S5[0][9] = 5;
S5[0][10] = 3;
S5[0][11] = 15;
S5[0][12] = 13;
S5[0][13] = 0;
S5[0][14] = 14;
S5[0][15] = 9;
S5[1][0] = 14;
S5[1][1] = 11;
S5[1][2] = 2;
S5[1][3] = 12;
S5[1][4] = 4;
S5[1][5] = 7;
S5[1][6] = 13;
S5[1][7] = 1;
S5[1][8] = 5;
S5[1][9] = 0;
S5[1][10] = 15;
S5[1][11] = 10;
S5[1][12] = 3;
S5[1][13] = 9;
S5[1][14] = 8;
S5[1][15] = 6;
S5[2][0] = 4;
S5[2][1] = 2;
S5[2][2] = 1;
S5[2][3] = 11;
S5[2][4] = 10;
S5[2][5] = 13;
S5[2][6] = 7;
S5[2][7] = 8;
S5[2][8] = 15;
S5[2][9] = 9;
S5[2][10] = 12;
S5[2][11] = 5;
S5[2][12] = 6;
S5[2][13] = 3;
S5[2][14] = 0;
S5[2][15] = 14;
S5[3][0] = 11;
S5[3][1] = 8;
S5[3][2] = 12;
S5[3][3] = 7;
S5[3][4] = 1;
S5[3][5] = 14;
S5[3][6] = 2;
S5[3][7] = 13;
S5[3][8] = 6;
S5[3][9] = 15;
S5[3][10] = 0;
S5[3][11] = 9;
S5[3][12] = 10;
S5[3][13] = 4;
S5[3][14] = 5;
S5[3][15] = 3;
S6[0][0] = 12;
S6[0][1] = 1;
S6[0][2] = 10;
S6[0][3] = 15;
S6[0][4] = 9;
S6[0][5] = 2;
S6[0][6] = 6;
S6[0][7] = 8;
S6[0][8] = 0;
S6[0][9] = 13;
S6[0][10] = 3;
S6[0][11] = 4;
S6[0][12] = 14;
S6[0][13] = 7;
S6[0][14] = 5;
S6[0][15] = 11;
S6[1][0] = 10;
S6[1][1] = 15;
S6[1][2] = 4;
S6[1][3] = 2;
S6[1][4] = 7;
S6[1][5] = 12;
S6[1][6] = 9;
S6[1][7] = 5;
S6[1][8] = 6;
S6[1][9] = 1;
S6[1][10] = 13;
S6[1][11] = 14;
S6[1][12] = 0;
S6[1][13] = 11;
S6[1][14] = 3;
S6[1][15] = 8;
S6[2][0] = 9;
S6[2][1] = 14;
S6[2][2] = 15;
S6[2][3] = 5;
S6[2][4] = 2;
S6[2][5] = 8;
S6[2][6] = 12;
S6[2][7] = 3;
S6[2][8] = 7;
S6[2][9] = 0;
S6[2][10] = 4;
S6[2][11] = 10;
S6[2][12] = 1;
S6[2][13] = 13;
S6[2][14] = 11;
S6[2][15] = 6;
S6[3][0] = 4;
S6[3][1] = 3;
S6[3][2] = 2;
S6[3][3] = 12;
S6[3][4] = 9;
S6[3][5] = 5;
S6[3][6] = 15;
S6[3][7] = 10;
S6[3][8] = 11;
S6[3][9] = 14;
S6[3][10] = 1;
S6[3][11] = 7;
S6[3][12] = 6;
S6[3][13] = 0;
S6[3][14] = 8;
S6[3][15] = 13;
S7[0][0] = 4;
S7[0][1] = 11;
S7[0][2] = 2;
S7[0][3] = 14;
S7[0][4] = 15;
S7[0][5] = 0;
S7[0][6] = 8;
S7[0][7] = 13;
S7[0][8] = 3;
S7[0][9] = 12;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -