-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