-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 ****
你陣列IP有63個元素,它缺少最後一個元素。應該是......'63,55,47,39,31,23,15,7};' – user1155120
完全忽略了,謝謝你,現在工作得體。 :) – Elmangos