📄 desdlg.cpp
字号:
for(k=0;k<32;k++)
{
if(L[i][k]==tmp1[k])
R[i+1][k]=0;
else
R[i+1][k]=1;
}
for(k=0;k<32;k++)
{
L[i+1][k]=R[i][k];
}
for(k=0;k<32;k++)
{
out[k]=L[16][k];
}
for(k=32;k<64;k++)
{
out[k]=R[16][k];
}
}
data[57]=out[0]; //逆初始置换
data[49]=out[1];
data[41]=out[2];
data[33]=out[3];
data[25]=out[4];
data[17]=out[5];
data[9]=out[6];
data[1]=out[7];
data[59]=out[8];
data[51]=out[9];
data[43]=out[10];
data[35]=out[11];
data[27]=out[12];
data[19]=out[13];
data[11]=out[14];
data[3]=out[15];
data[61]=out[16];
data[53]=out[17];
data[45]=out[18];
data[37]=out[19];
data[29]=out[20];
data[21]=out[21];
data[13]=out[22];
data[4]=out[23];
data[63]=out[24];
data[55]=out[25];
data[47]=out[26];
data[39]=out[27];
data[31]=out[28];
data[23]=out[29];
data[15]=out[30];
data[7]=out[31];
data[56]=out[32];
data[48]=out[33];
data[40]=out[34];
data[32]=out[35];
data[24]=out[36];
data[16]=out[37];
data[8]=out[38];
data[0]=out[39];
data[58]=out[40];
data[50]=out[41];
data[42]=out[42];
data[34]=out[43];
data[26]=out[44];
data[18]=out[45];
data[10]=out[46];
data[2]=out[47];
data[60]=out[48];
data[52]=out[49];
data[44]=out[50];
data[36]=out[51];
data[28]=out[52];
data[20]=out[53];
data[12]=out[54];
data[4]=out[55];
data[62]=out[56];
data[54]=out[57];
data[46]=out[58];
data[38]=out[59];
data[30]=out[60];
data[22]=out[61];
data[14]=out[62];
data[6]=out[63];
for(i=0;i<64;i++)
{
if(data[i]==1)
C[i]='1';
else
C[i]='0';
}
this->SetDlgItemText(IDC_Ciphertext,C);
}
void CDESDlg::OnDecryption()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int k,i,g,j,x,y;
int L[17][32],R[17][32],R1[16][8];
int keyT[56],keys[16][56],K[16][48];
int B[8],tmp[32],tmp1[32],out[64],data[64];
char C[8];
int a[64]={0};
int S[8][4][16]={{{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},
{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},
{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},
{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}},
{{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},
{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},
{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},
{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}},
{{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},
{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},
{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},
{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}},
{{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},
{13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},
{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},
{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}},
{{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},
{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},
{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},
{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}},
{{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},
{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},
{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},
{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}},
{{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},
{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},
{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},
{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}},
{{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},
{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},
{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},
{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}}};
for(k=0;k<8;k++)
{
g = m_Key[k];
j=0;
for(i=8*k+6;i>8*k;i--)
{
a[i] = g%2;
if(a[i]==1)j++;
g /= 2;
}
if(j%2==0)
a[8*k+7]=1;
else
a[8*k+7]=0;
}
keyT[0] = a[56];
keyT[1] = a[48];
keyT[2] = a[40];
keyT[3] = a[32];
keyT[4] = a[24];
keyT[5] = a[16];
keyT[6] = a[8];
keyT[7] = a[0];
keyT[8] = a[57];
keyT[9] = a[49];
keyT[10] = a[41];
keyT[11] = a[33];
keyT[12] = a[25];
keyT[13] = a[17];
keyT[14] = a[9];
keyT[15] = a[1];
keyT[16] = a[58];
keyT[17] = a[50];
keyT[18] = a[42];
keyT[19] = a[34];
keyT[20] = a[26];
keyT[21] = a[18];
keyT[22] = a[10];
keyT[23] = a[2];
keyT[24] = a[59];
keyT[25] = a[51];
keyT[26] = a[43];
keyT[27] = a[35];
keyT[28] = a[64];
keyT[29] = a[54];
keyT[30] = a[46];
keyT[31] = a[38];
keyT[32] = a[30];
keyT[33] = a[22];
keyT[34] = a[14];
keyT[35] = a[6];
keyT[36] = a[61];
keyT[37] = a[53];
keyT[38] = a[45];
keyT[39] = a[37];
keyT[40] = a[29];
keyT[41] = a[21];
keyT[42] = a[13];
keyT[43] = a[5];
keyT[44] = a[60];
keyT[45] = a[52];
keyT[46] = a[44];
keyT[47] = a[36];
keyT[48] = a[28];
keyT[49] = a[20];
keyT[50] = a[12];
keyT[51] = a[4];
keyT[52] = a[27];
keyT[53] = a[19];
keyT[54] = a[11];
keyT[55] = a[3];
for(i=0;i<28;i++)
{
keys[0][i] = keyT[((i-1)+28)%28];
}
for(i=28;i<55;i++)
{
keys[0][i] = keyT[(i-1)%28+28];
}
for(i=0;i<28;i++)
{
keys[1][i] = keys[0][((i-1)+28)%28];
}
for(i=28;i<55;i++)
{
keys[1][i] = keys[0][(i-1)%28+28];
}
for(k=2;k<8;k++)
{
for(i=0;i<28;i++)
{
keys[k][i]=keys[k-1][((i-2)+28)%28];
}
for(i=28;i<55;i++)
{
keys[k][i]=keys[k-1][(i-2)%28+28];
}
}
for(i=0;i<28;i++)
{
keys[8][i] = keys[7][((i-1)+28)%28];
}
for(i=28;i<55;i++)
{
keys[8][i] = keys[7][(i-1)%28+28];
}
for(k=9;k<15;k++)
{
for(i=0;i<28;i++)
{
keys[k][i]=keys[k-1][((i-2)+28)%28];
}
for(i=28;i<55;i++)
{
keys[k][i]=keys[k-1][(i-2)%28+28];
}
}
for(i=0;i<28;i++)
{
keys[15][i] = keys[14][((i-1)+28)%28];
}
for(i=28;i<55;i++)
{
keys[15][i] = keys[14][(i-1)%28+28];
}
for(k=0;k<16;k++)
{
K[k][0]=keys[k][13];
K[k][1]=keys[k][16];
K[k][2]=keys[k][10];
K[k][3]=keys[k][23];
K[k][4]=keys[k][0];
K[k][5]=keys[k][4];
K[k][6]=keys[k][2];
K[k][7]=keys[k][27];
K[k][8]=keys[k][14];
K[k][9]=keys[k][5];
K[k][10]=keys[k][20];
K[k][11]=keys[k][9];
K[k][12]=keys[k][22];
K[k][13]=keys[k][18];
K[k][14]=keys[k][11];
K[k][15]=keys[k][3];
K[k][16]=keys[k][25];
K[k][17]=keys[k][7];
K[k][18]=keys[k][15];
K[k][19]=keys[k][6];
K[k][20]=keys[k][26];
K[k][21]=keys[k][19];
K[k][22]=keys[k][12];
K[k][23]=keys[k][1];
K[k][24]=keys[k][40];
K[k][25]=keys[k][51];
K[k][26]=keys[k][30];
K[k][27]=keys[k][36];
K[k][28]=keys[k][46];
K[k][29]=keys[k][54];
K[k][30]=keys[k][29];
K[k][31]=keys[k][39];
K[k][32]=keys[k][50];
K[k][33]=keys[k][44];
K[k][34]=keys[k][32];
K[k][35]=keys[k][47];
K[k][36]=keys[k][43];
K[k][37]=keys[k][48];
K[k][38]=keys[k][38];
K[k][39]=keys[k][55];
K[k][40]=keys[k][33];
K[k][41]=keys[k][52];
K[k][42]=keys[k][45];
K[k][43]=keys[k][41];
K[k][44]=keys[k][49];
K[k][45]=keys[k][35];
K[k][46]=keys[k][28];
K[k][47]=keys[k][31];
}
for(k=0;k<64;k++)
{
if(m_Ciphertext[k]=='1')
a[k]=1;
else
a[k]=0;
}
L[0][0]=a[57];
L[0][1]=a[49];
L[0][2]=a[41];
L[0][3]=a[33];
L[0][4]=a[25];
L[0][5]=a[17];
L[0][6]=a[9];
L[0][7]=a[1];
L[0][8]=a[59];
L[0][9]=a[51];
L[0][10]=a[43];
L[0][11]=a[35];
L[0][12]=a[27];
L[0][13]=a[19];
L[0][14]=a[11];
L[0][15]=a[3];
L[0][16]=a[61];
L[0][17]=a[53];
L[0][18]=a[45];
L[0][19]=a[37];
L[0][20]=a[29];
L[0][21]=a[21];
L[0][22]=a[13];
L[0][23]=a[5];
L[0][24]=a[63];
L[0][25]=a[55];
L[0][26]=a[47];
L[0][27]=a[39];
L[0][28]=a[31];
L[0][29]=a[23];
L[0][30]=a[15];
L[0][31]=a[7];
R[0][0]=a[56];
R[0][1]=a[48];
R[0][2]=a[40];
R[0][3]=a[32];
R[0][4]=a[24];
R[0][5]=a[16];
R[0][6]=a[8];
R[0][7]=a[0];
R[0][8]=a[58];
R[0][9]=a[50];
R[0][10]=a[42];
R[0][11]=a[34];
R[0][12]=a[26];
R[0][13]=a[18];
R[0][14]=a[10];
R[0][15]=a[2];
R[0][16]=a[60];
R[0][17]=a[52];
R[0][18]=a[44];
R[0][19]=a[36];
R[0][20]=a[28];
R[0][21]=a[20];
R[0][22]=a[12];
R[0][23]=a[4];
R[0][24]=a[62];
R[0][25]=a[54];
R[0][26]=a[46];
R[0][27]=a[38];
R[0][28]=a[30];
R[0][29]=a[22];
R[0][30]=a[14];
R[0][31]=a[6];
for(i=0;i<16;i++)
{
R1[i][0]=R[i][31];
R1[i][1]=R[i][0];
R1[i][2]=R[i][1];
R1[i][3]=R[i][2];
R1[i][4]=R[i][3];
R1[i][5]=R[i][4];
R1[i][6]=R[i][3];
R1[i][7]=R[i][4];
R1[i][8]=R[i][5];
R1[i][9]=R[i][6];
R1[i][10]=R[i][7];
R1[i][11]=R[i][8];
R1[i][12]=R[i][7];
R1[i][13]=R[i][8];
R1[i][14]=R[i][9];
R1[i][15]=R[i][10];
R1[i][16]=R[i][11];
R1[i][17]=R[i][12];
R1[i][18]=R[i][11];
R1[i][19]=R[i][12];
R1[i][20]=R[i][13];
R1[i][21]=R[i][14];
R1[i][22]=R[i][15];
R1[i][23]=R[i][16];
R1[i][24]=R[i][15];
R1[i][25]=R[i][16];
R1[i][26]=R[i][17];
R1[i][27]=R[i][18];
R1[i][28]=R[i][19];
R1[i][29]=R[i][20];
R1[i][30]=R[i][19];
R1[i][31]=R[i][20];
R1[i][32]=R[i][21];
R1[i][33]=R[i][22];
R1[i][34]=R[i][23];
R1[i][35]=R[i][24];
R1[i][36]=R[i][23];
R1[i][37]=R[i][24];
R1[i][38]=R[i][25];
R1[i][39]=R[i][26];
R1[i][40]=R[i][27];
R1[i][41]=R[i][28];
R1[i][42]=R[i][27];
R1[i][43]=R[i][28];
R1[i][44]=R[i][29];
R1[i][45]=R[i][30];
R1[i][46]=R[i][31];
R1[i][47]=R[i][0];
for(j=0;j<48;j++)
{
if(R1[i][j]==K[15-i][j])
R1[i][j]=0;
else
R1[i][j]=1;
}
for(k=0;k<8;k++)
{
x=2*R1[i][6*k]+R1[i][6*k+5];
y=8*R1[i][6*k+1]+4*R1[i][6*k+2]+2*R1[i][6*k+3]+R1[i][6*k+4];
B[k]=S[k][x][y];
}
for(k=0;k<8;k++)
{
g=B[k];
for(j=4*k+4;j>4*j;j--)
{
tmp[j]=g%2;
g/=2;
}
tmp1[0]=tmp[15];
tmp1[1]=tmp[6];
tmp1[2]=tmp[19];
tmp1[3]=tmp[20];
tmp1[4]=tmp[28];
tmp1[5]=tmp[11];
tmp1[6]=tmp[27];
tmp1[7]=tmp[16];
tmp1[8]=tmp[0];
tmp1[9]=tmp[14];
tmp1[10]=tmp[22];
tmp1[11]=tmp[25];
tmp1[12]=tmp[4];
tmp1[13]=tmp[17];
tmp1[14]=tmp[30];
tmp1[15]=tmp[9];
tmp1[16]=tmp[1];
tmp1[17]=tmp[7];
tmp1[18]=tmp[23];
tmp1[19]=tmp[13];
tmp1[20]=tmp[31];
tmp1[21]=tmp[26];
tmp1[22]=tmp[2];
tmp1[23]=tmp[8];
tmp1[24]=tmp[18];
tmp1[25]=tmp[12];
tmp1[26]=tmp[29];
tmp1[27]=tmp[5];
tmp1[28]=tmp[21];
tmp1[29]=tmp[10];
tmp1[30]=tmp[3];
tmp1[31]=tmp[24];
}
for(k=0;k<32;k++)
{
if(L[i][k]==tmp1[k])
R[i+1][k]=0;
else
R[i+1][k]=1;
}
for(k=0;k<32;k++)
{
L[i+1][k]=R[i][k];
}
for(k=0;k<32;k++)
{
out[k]=L[16][k];
}
for(k=32;k<64;k++)
{
out[k]=R[16][k];
}
}
data[57]=out[0];
data[49]=out[1];
data[41]=out[2];
data[33]=out[3];
data[25]=out[4];
data[17]=out[5];
data[9]=out[6];
data[1]=out[7];
data[59]=out[8];
data[51]=out[9];
data[43]=out[10];
data[35]=out[11];
data[27]=out[12];
data[19]=out[13];
data[11]=out[14];
data[3]=out[15];
data[61]=out[16];
data[53]=out[17];
data[45]=out[18];
data[37]=out[19];
data[29]=out[20];
data[21]=out[21];
data[13]=out[22];
data[4]=out[23];
data[63]=out[24];
data[55]=out[25];
data[47]=out[26];
data[39]=out[27];
data[31]=out[28];
data[23]=out[29];
data[15]=out[30];
data[7]=out[31];
data[56]=out[32];
data[48]=out[33];
data[40]=out[34];
data[32]=out[35];
data[24]=out[36];
data[16]=out[37];
data[8]=out[38];
data[0]=out[39];
data[58]=out[40];
data[50]=out[41];
data[42]=out[42];
data[34]=out[43];
data[26]=out[44];
data[18]=out[45];
data[10]=out[46];
data[2]=out[47];
data[60]=out[48];
data[52]=out[49];
data[44]=out[50];
data[36]=out[51];
data[28]=out[52];
data[20]=out[53];
data[12]=out[54];
data[4]=out[55];
data[62]=out[56];
data[54]=out[57];
data[46]=out[58];
data[38]=out[59];
data[30]=out[60];
data[22]=out[61];
data[14]=out[62];
data[6]=out[63];
for(k=0;k<8;k++)
{
C[k]=64*data[8*k]+32*data[8*k+1]+16*data[8*k+2]+8*data[8*k+3]+4*data[8*k+4]+2*data[8*k+5]+data[8*k+6];
}
this->SetDlgItemText(IDC_Plaintext,C);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -