2016-09-26 16 views
-1

當我嘗試添加到數組「encData1」中時,我不斷收到索引超出界限的錯誤,但無法找出原因。它接近代碼的底部,並希望能得到幫助。我曾嘗試添加一些語句來打印出數組的大小,並且它們都以64個字符出現,但我得到的索引超出了63的範圍,這對我來說沒有任何意義。無法確定此IndexOutOfBounds錯誤嗎?

int [] iP = {58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4 
     ,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8, 
     57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5, 
     63,55,47,39,31,23,15}; 

char[] ipKey = new char[56]; 

for(int j = 0; j <56; j++){ 
    ipKey[j]= k.charAt(pc1[j]); 
} 

char[] keyLeft = new char[28]; 
for(int f = 0; f < 28; f++){ 
    keyLeft[f] = ipKey[f]; 
} 
char[] keyRight = new char[28]; 
int a = 0; 
for(int f = ipKey.length/2; f < 56; f++){ 
    keyRight[a] = ipKey[f]; 
    a++; 
} 
System.out.println("Key after original permutation is " + printArrayKey(ipKey) +"\n"); 


char[] cmbKey = new char[56]; 
char[] permCmbKey = new char[48]; 
while (i <= 16){ 
    char tempLeft = ' '; 
    char tempRight = ' '; 
    char tempLeft1 = ' '; 
    char tempRight1 = ' '; 

    if (i != 1){ 
     for(int r = 0; r < 28; r++){ 
      keyLeft[r] = cmbKey[r]; 
     }//for loop creating new left half of key. 
     int w = 0; 
     for (int r = cmbKey.length/2;r < 56; r++){ 
      keyRight[w] = cmbKey[r]; 
      w++; 
     }//for loop for creating new right half of key 

    } 

    if(i == 1 || i == 2 || i== 9 || i== 16){ 
     perform1LeftShift(keyLeft); 
     perform1LeftShift(keyRight); 
    } // if loop for 1 left shift. 
    else{ 
     perform2LeftShifts(keyLeft); 
     perform2LeftShifts(keyRight); 

    }//else loop to perform 2 left shifts. 

    int y = 0; 
    for(int p = 0; p < cmbKey.length; p++){ 

     if(p < keyLeft.length){ 
      cmbKey[p] = keyLeft[p]; 
     }//if loop for left side 
     else if (p >= 28){ 
      cmbKey[p] = keyRight[y]; 
      y++; 
     }//else loop for right side. 
    }//for loop combining key halves 
    for(int u = 0; u < pc2.length; u++){ 
     permCmbKey[u] = cmbKey[pc2[u]-1]; 

    }//for for permutation of subkey 
    System.out.println("Key " + i + " is " + printArrayKey(permCmbKey) +"\n"); 
    if(i == 1){ 
     key1 = fromArrayToString(permCmbKey); 
    } else if(i == 2){ 
     key2 = fromArrayToString(permCmbKey); 
    } else if(i == 3){ 
     key3 = fromArrayToString(permCmbKey); 
    } else if(i == 4){ 
     key4 = fromArrayToString(permCmbKey); 
    } else if(i == 5){ 
     key5 = fromArrayToString(permCmbKey); 
    } else if(i == 6){ 
     key6 = fromArrayToString(permCmbKey); 
    } else if(i == 7){ 
     key7 = fromArrayToString(permCmbKey); 
    } else if(i == 8){ 
     key8 = fromArrayToString(permCmbKey); 
    } else if(i == 9){ 
     key9 = fromArrayToString(permCmbKey); 
    } else if(i == 10){ 
     key10 = fromArrayToString(permCmbKey); 
    } else if(i == 11){ 
     key11 = fromArrayToString(permCmbKey); 
    } else if(i == 12){ 
     key12 = fromArrayToString(permCmbKey); 
    } else if(i == 13){ 
     key13 = fromArrayToString(permCmbKey); 
    } else if(i == 14){ 
     key14 = fromArrayToString(permCmbKey); 
    } else if(i == 15){ 
     key15 = fromArrayToString(permCmbKey); 
    } else if(i == 16){ 
     key16 = fromArrayToString(permCmbKey); 
    } 
    i++; 
}//while loop 

int x = 0; 
String data = stringToBinary(message); 
String data1 = ""; 
String data2 = ""; 
String data3 = ""; 
String data4 = ""; 
String data5 = ""; 
char [] encData1 = new char [64]; 
char [] encData2 = new char [64]; 
char [] encData3 = new char [64]; 
char [] encData4 = new char[64]; 
char [] encData5 = new char [64]; 
// for loop that starts DES on message. 
if(data.length() > 64 && data.length() < 128){ // **** 
    data1 = data.substring(0, 64); 
    data2 = data.substring(64,data.length()-1); 
    while(data2.length() < 64){ 
     data2 += '0'; 
    }//data2 length 
    System.out.println("Data after preprocessing \n" + printData(data1) + "\n" + printData(data2)); 
    char [] d1 = data1.toCharArray(); 
    char [] d2 = data2.toCharArray(); 

    for(int z = 0; z< 64; z++){ 
     // char [] d1 = data1.toCharArray(); 
     // char [] d2 = data2.toCharArray(); 
     encData1[z] = d1[iP[z]-1]; 
     encData2[z] = d2[iP[z]-1]; 
    } 
    System.out.println("Data after initial permutation is " + printArrayKey(encData1)); 
}//if >64<128 **** 
+1

你陣列IP有63個元素,它缺少最後一個元素。應該是......'63,55,47,39,31,23,15,7};' – user1155120

+0

完全忽略了,謝謝你,現在工作得體。 :) – Elmangos

回答

0

你的iP int數組只有63個元素(索引從0到62)。

+0

謝謝大家,大概應該算第一哈哈:D – Elmangos

相關問題