int G[][]=new int[16][48];
int L[]=new int[33];int R[]=new int[33];int F[]=new int[33]; public void DES_Code(int[] Input)
{
L[1] = ((Input[7] & 64) > 0) ? 1:0; R[1] = ((Input[7] & 128) > 0) ? 1:0;
L[2] = ((Input[6] & 64) > 0) ? 1:0; R[2] = ((Input[6] & 128) > 0) ? 1:0;
L[3] = ((Input[5] & 64) > 0) ? 1:0; R[3] = ((Input[5] & 128) > 0) ? 1:0;
L[4] = ((Input[4] & 64) > 0) ? 1:0; R[4] = ((Input[4] & 128) > 0) ? 1:0;
L[5] = ((Input[3] & 64) > 0) ? 1:0; R[5] = ((Input[3] & 128) > 0) ? 1:0;
L[6] = ((Input[2] & 64) > 0) ? 1:0; R[6] = ((Input[2] & 128) > 0) ? 1:0;
L[7] = ((Input[1] & 64) > 0) ? 1:0; R[7] = ((Input[1] & 128) > 0) ? 1:0;
L[8] = ((Input[0] & 64) > 0) ? 1:0; R[8] = ((Input[0] & 128) > 0) ? 1:0;
L[9] = ((Input[7] & 16) > 0) ? 1:0; R[9] = ((Input[7] & 32) > 0) ? 1:0;
L[10] = ((Input[6] & 16) > 0) ? 1:0; R[10] = ((Input[6] & 32) > 0) ? 1:0;
L[11] = ((Input[5] & 16) > 0) ? 1:0; R[11] = ((Input[5] & 32) > 0) ? 1:0;
L[12] = ((Input[4] & 16) > 0) ? 1:0; R[12] = ((Input[4] & 32) > 0) ? 1:0;
L[13] = ((Input[3] & 16) > 0) ? 1:0; R[13] = ((Input[3] & 32) > 0) ? 1:0;
L[14] = ((Input[2] & 16) > 0) ? 1:0; R[14] = ((Input[2] & 32) > 0) ? 1:0;
L[15] = ((Input[1] & 16) > 0) ? 1:0; R[15] = ((Input[1] & 32) > 0) ? 1:0;
L[16] = ((Input[0] & 16) > 0) ? 1:0; R[16] = ((Input[0] & 32) > 0) ? 1:0;
L[17] = ((Input[7] & 4) > 0) ? 1:0; R[17] = ((Input[7] & 8) > 0) ? 1:0;
L[18] = ((Input[6] & 4) > 0) ? 1:0; R[18] = ((Input[6] & 8) > 0) ? 1:0;
L[19] = ((Input[5] & 4) > 0) ? 1:0; R[19] = ((Input[5] & 8) > 0) ? 1:0;
L[20] = ((Input[4] & 4) > 0) ? 1:0; R[20] = ((Input[4] & 8) > 0) ? 1:0;
L[21] = ((Input[3] & 4) > 0) ? 1:0; R[21] = ((Input[3] & 8) > 0) ? 1:0;
L[22] = ((Input[2] & 4) > 0) ? 1:0; R[22] = ((Input[2] & 8) > 0) ? 1:0;
L[23] = ((Input[1] & 4) > 0) ? 1:0; R[23] = ((Input[1] & 8) > 0) ? 1:0;
L[24] = ((Input[0] & 4) > 0) ? 1:0; R[24] = ((Input[0] & 8) > 0) ? 1:0;
L[25] = Input[7] & 1; R[25] = ((Input[7] & 2) > 0) ? 1:0;
L[26] = Input[6] & 1; R[26] = ((Input[6] & 2) > 0) ? 1:0;
L[27] = Input[5] & 1; R[27] = ((Input[5] & 2) > 0) ? 1:0;
L[28] = Input[4] & 1; R[28] = ((Input[4] & 2) > 0) ? 1:0;
L[29] = Input[3] & 1; R[29] = ((Input[3] & 2) > 0) ? 1:0;
L[30] = Input[2] & 1; R[30] = ((Input[2] & 2) > 0) ? 1:0;
L[31] = Input[1] & 1; R[31] = ((Input[1] & 2) > 0) ? 1:0;
L[32] = Input[0] & 1; R[32] = ((Input[0] & 2) > 0) ? 1:0; for (int n = 0;n<16;n++)
{
int z;
z = ((R[32] ^ G[n][1-1]) << 5) | ((R[5] ^ G[n][6-1]) << 4) | ((R[1] ^ G[n][2-1]) << 3) | ((R[2] ^ G[n][3-1]) << 2) | ((R[3] ^ G[n][4-1]) << 1) | (R[4] ^ G[n][5-1]);
F[9] = L[9] ^ SA1[z];
F[17] = L[17] ^ SB1[z];
F[23] = L[23] ^ SC1[z];
F[31] = L[31] ^ SD1[z]; z = ((R[4] ^ G[n][7-1]) << 5) | ((R[9] ^ G[n][12-1]) << 4) | ((R[5] ^ G[n][8-1]) << 3) | ((R[6] ^ G[n][9-1]) << 2) | ((R[7] ^ G[n][10-1]) << 1) | (R[8] ^ G[n][11-1]);
F[13] = L[13] ^ SA2[z];
F[28] = L[28] ^ SB2[z];
F[2] = L[2] ^ SC2[z];
F[18] = L[18] ^ SD2[z]; z = ((R[8] ^ G[n][13-1]) << 5) | ((R[13] ^ G[n][18-1]) << 4) | ((R[9] ^ G[n][14-1]) << 3) | ((R[10] ^ G[n][15-1]) << 2) | ((R[11] ^ G[n][16-1]) << 1) | (R[12] ^ G[n][17-1]);
F[24] = L[24] ^ SA3[z];
F[16] = L[16] ^ SB3[z];
F[30] = L[30] ^ SC3[z];
F[6] = L[6] ^ SD3[z]; z = ((R[12] ^ G[n][19-1]) << 5) | ((R[17] ^ G[n][24-1]) << 4) | ((R[13] ^ G[n][20-1]) << 3) | ((R[14] ^ G[n][21-1]) << 2) | ((R[15] ^ G[n][22-1]) << 1) | (R[16] ^ G[n][23-1]);
F[26] = L[26] ^ SA4[z];
F[20] = L[20] ^ SB4[z];
F[10] = L[10] ^ SC4[z];
F[1] = L[1] ^ SD4[z]; z = ((R[16] ^ G[n][25-1]) << 5) | ((R[21] ^ G[n][30-1]) << 4) | ((R[17] ^ G[n][26-1]) << 3) | ((R[18] ^ G[n][27-1]) << 2) | ((R[19] ^ G[n][28-1]) << 1) | (R[20] ^ G[n][29-1]);
F[8] = L[8] ^ SA5[z];
F[14] = L[14] ^ SB5[z];
F[25] = L[25] ^ SC5[z];
F[3] = L[3] ^ SD5[z]; z = ((R[20] ^ G[n][31-1]) << 5) | ((R[25] ^ G[n][36-1]) << 4) | ((R[21] ^ G[n][32-1]) << 3) | ((R[22] ^ G[n][33-1]) << 2) | ((R[23] ^ G[n][34-1]) << 1) | (R[24] ^ G[n][35-1]);
F[4] = L[4] ^ SA6[z];
F[29] = L[29] ^ SB6[z];
F[11] = L[11] ^ SC6[z];
F[19] = L[19] ^ SD6[z]; z = ((R[24] ^ G[n][37-1]) << 5) | ((R[29] ^ G[n][42-1]) << 4) | ((R[25] ^ G[n][38-1]) << 3) | ((R[26] ^ G[n][39-1]) << 2) | ((R[27] ^ G[n][40-1]) << 1) | (R[28] ^ G[n][41-1]);
F[32] = L[32] ^ SA7[z];
F[12] = L[12] ^ SB7[z];
F[22] = L[22] ^ SC7[z];
F[7] = L[7] ^ SD7[z]; z = ((R[28] ^ G[n][43-1]) << 5) | ((R[1] ^ G[n][48-1]) << 4) | ((R[29] ^ G[n][44-1]) << 3) | ((R[30] ^ G[n][45-1]) << 2) | ((R[31] ^ G[n][46-1]) << 1) | (R[32] ^ G[n][47-1]);
F[5] = L[5] ^ SA8[z];
F[27] = L[27] ^ SB8[z];
F[15] = L[15] ^ SC8[z];
F[21] = L[21] ^ SD8[z]; L = R;
R = F;
}
}for循环运行到第二次时,数组R的值就莫名其妙变化了。疯掉了!
int L[]=new int[33];int R[]=new int[33];int F[]=new int[33]; public void DES_Code(int[] Input)
{
L[1] = ((Input[7] & 64) > 0) ? 1:0; R[1] = ((Input[7] & 128) > 0) ? 1:0;
L[2] = ((Input[6] & 64) > 0) ? 1:0; R[2] = ((Input[6] & 128) > 0) ? 1:0;
L[3] = ((Input[5] & 64) > 0) ? 1:0; R[3] = ((Input[5] & 128) > 0) ? 1:0;
L[4] = ((Input[4] & 64) > 0) ? 1:0; R[4] = ((Input[4] & 128) > 0) ? 1:0;
L[5] = ((Input[3] & 64) > 0) ? 1:0; R[5] = ((Input[3] & 128) > 0) ? 1:0;
L[6] = ((Input[2] & 64) > 0) ? 1:0; R[6] = ((Input[2] & 128) > 0) ? 1:0;
L[7] = ((Input[1] & 64) > 0) ? 1:0; R[7] = ((Input[1] & 128) > 0) ? 1:0;
L[8] = ((Input[0] & 64) > 0) ? 1:0; R[8] = ((Input[0] & 128) > 0) ? 1:0;
L[9] = ((Input[7] & 16) > 0) ? 1:0; R[9] = ((Input[7] & 32) > 0) ? 1:0;
L[10] = ((Input[6] & 16) > 0) ? 1:0; R[10] = ((Input[6] & 32) > 0) ? 1:0;
L[11] = ((Input[5] & 16) > 0) ? 1:0; R[11] = ((Input[5] & 32) > 0) ? 1:0;
L[12] = ((Input[4] & 16) > 0) ? 1:0; R[12] = ((Input[4] & 32) > 0) ? 1:0;
L[13] = ((Input[3] & 16) > 0) ? 1:0; R[13] = ((Input[3] & 32) > 0) ? 1:0;
L[14] = ((Input[2] & 16) > 0) ? 1:0; R[14] = ((Input[2] & 32) > 0) ? 1:0;
L[15] = ((Input[1] & 16) > 0) ? 1:0; R[15] = ((Input[1] & 32) > 0) ? 1:0;
L[16] = ((Input[0] & 16) > 0) ? 1:0; R[16] = ((Input[0] & 32) > 0) ? 1:0;
L[17] = ((Input[7] & 4) > 0) ? 1:0; R[17] = ((Input[7] & 8) > 0) ? 1:0;
L[18] = ((Input[6] & 4) > 0) ? 1:0; R[18] = ((Input[6] & 8) > 0) ? 1:0;
L[19] = ((Input[5] & 4) > 0) ? 1:0; R[19] = ((Input[5] & 8) > 0) ? 1:0;
L[20] = ((Input[4] & 4) > 0) ? 1:0; R[20] = ((Input[4] & 8) > 0) ? 1:0;
L[21] = ((Input[3] & 4) > 0) ? 1:0; R[21] = ((Input[3] & 8) > 0) ? 1:0;
L[22] = ((Input[2] & 4) > 0) ? 1:0; R[22] = ((Input[2] & 8) > 0) ? 1:0;
L[23] = ((Input[1] & 4) > 0) ? 1:0; R[23] = ((Input[1] & 8) > 0) ? 1:0;
L[24] = ((Input[0] & 4) > 0) ? 1:0; R[24] = ((Input[0] & 8) > 0) ? 1:0;
L[25] = Input[7] & 1; R[25] = ((Input[7] & 2) > 0) ? 1:0;
L[26] = Input[6] & 1; R[26] = ((Input[6] & 2) > 0) ? 1:0;
L[27] = Input[5] & 1; R[27] = ((Input[5] & 2) > 0) ? 1:0;
L[28] = Input[4] & 1; R[28] = ((Input[4] & 2) > 0) ? 1:0;
L[29] = Input[3] & 1; R[29] = ((Input[3] & 2) > 0) ? 1:0;
L[30] = Input[2] & 1; R[30] = ((Input[2] & 2) > 0) ? 1:0;
L[31] = Input[1] & 1; R[31] = ((Input[1] & 2) > 0) ? 1:0;
L[32] = Input[0] & 1; R[32] = ((Input[0] & 2) > 0) ? 1:0; for (int n = 0;n<16;n++)
{
int z;
z = ((R[32] ^ G[n][1-1]) << 5) | ((R[5] ^ G[n][6-1]) << 4) | ((R[1] ^ G[n][2-1]) << 3) | ((R[2] ^ G[n][3-1]) << 2) | ((R[3] ^ G[n][4-1]) << 1) | (R[4] ^ G[n][5-1]);
F[9] = L[9] ^ SA1[z];
F[17] = L[17] ^ SB1[z];
F[23] = L[23] ^ SC1[z];
F[31] = L[31] ^ SD1[z]; z = ((R[4] ^ G[n][7-1]) << 5) | ((R[9] ^ G[n][12-1]) << 4) | ((R[5] ^ G[n][8-1]) << 3) | ((R[6] ^ G[n][9-1]) << 2) | ((R[7] ^ G[n][10-1]) << 1) | (R[8] ^ G[n][11-1]);
F[13] = L[13] ^ SA2[z];
F[28] = L[28] ^ SB2[z];
F[2] = L[2] ^ SC2[z];
F[18] = L[18] ^ SD2[z]; z = ((R[8] ^ G[n][13-1]) << 5) | ((R[13] ^ G[n][18-1]) << 4) | ((R[9] ^ G[n][14-1]) << 3) | ((R[10] ^ G[n][15-1]) << 2) | ((R[11] ^ G[n][16-1]) << 1) | (R[12] ^ G[n][17-1]);
F[24] = L[24] ^ SA3[z];
F[16] = L[16] ^ SB3[z];
F[30] = L[30] ^ SC3[z];
F[6] = L[6] ^ SD3[z]; z = ((R[12] ^ G[n][19-1]) << 5) | ((R[17] ^ G[n][24-1]) << 4) | ((R[13] ^ G[n][20-1]) << 3) | ((R[14] ^ G[n][21-1]) << 2) | ((R[15] ^ G[n][22-1]) << 1) | (R[16] ^ G[n][23-1]);
F[26] = L[26] ^ SA4[z];
F[20] = L[20] ^ SB4[z];
F[10] = L[10] ^ SC4[z];
F[1] = L[1] ^ SD4[z]; z = ((R[16] ^ G[n][25-1]) << 5) | ((R[21] ^ G[n][30-1]) << 4) | ((R[17] ^ G[n][26-1]) << 3) | ((R[18] ^ G[n][27-1]) << 2) | ((R[19] ^ G[n][28-1]) << 1) | (R[20] ^ G[n][29-1]);
F[8] = L[8] ^ SA5[z];
F[14] = L[14] ^ SB5[z];
F[25] = L[25] ^ SC5[z];
F[3] = L[3] ^ SD5[z]; z = ((R[20] ^ G[n][31-1]) << 5) | ((R[25] ^ G[n][36-1]) << 4) | ((R[21] ^ G[n][32-1]) << 3) | ((R[22] ^ G[n][33-1]) << 2) | ((R[23] ^ G[n][34-1]) << 1) | (R[24] ^ G[n][35-1]);
F[4] = L[4] ^ SA6[z];
F[29] = L[29] ^ SB6[z];
F[11] = L[11] ^ SC6[z];
F[19] = L[19] ^ SD6[z]; z = ((R[24] ^ G[n][37-1]) << 5) | ((R[29] ^ G[n][42-1]) << 4) | ((R[25] ^ G[n][38-1]) << 3) | ((R[26] ^ G[n][39-1]) << 2) | ((R[27] ^ G[n][40-1]) << 1) | (R[28] ^ G[n][41-1]);
F[32] = L[32] ^ SA7[z];
F[12] = L[12] ^ SB7[z];
F[22] = L[22] ^ SC7[z];
F[7] = L[7] ^ SD7[z]; z = ((R[28] ^ G[n][43-1]) << 5) | ((R[1] ^ G[n][48-1]) << 4) | ((R[29] ^ G[n][44-1]) << 3) | ((R[30] ^ G[n][45-1]) << 2) | ((R[31] ^ G[n][46-1]) << 1) | (R[32] ^ G[n][47-1]);
F[5] = L[5] ^ SA8[z];
F[27] = L[27] ^ SB8[z];
F[15] = L[15] ^ SC8[z];
F[21] = L[21] ^ SD8[z]; L = R;
R = F;
}
}for循环运行到第二次时,数组R的值就莫名其妙变化了。疯掉了!
R = F; lz的意思是什么呢?DES加密算法不对?
答:数组R的值当然会发生变化.
这是因为:for循环运行到第二次时,你的 R = F;,就是说:R与F是同一个int[33]的数组. 而每一次循环.F都会变,因而R当然变化了.
代码修改如下:
将
L = R;
R = F;
改为:
int[] temp=L;
L=R;
R=F;
F=temp;