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的值就莫名其妙变化了。疯掉了!

解决方案 »

  1.   

      L = R; 
      R = F; lz的意思是什么呢?DES加密算法不对?
      

  2.   

    APOLLO_TS 是高手,没错,这是DES加密的一段
      

  3.   

    名字比较标准,连我都看出来是DES加密了。
      

  4.   

    名字比较标准,连我都看出来是DES加密了。
      

  5.   

    for循环运行到第二次时,数组R的值就莫名其妙变化了。疯掉了! 
    答:数组R的值当然会发生变化.
    这是因为:for循环运行到第二次时,你的 R = F;,就是说:R与F是同一个int[33]的数组. 而每一次循环.F都会变,因而R当然变化了.
    代码修改如下:
    将 
    L = R; 
    R = F; 
    改为:
    int[] temp=L;
    L=R;
    R=F;
    F=temp;