2016-09-26 4 views
-1

Ich bekomme immer einen Index außerhalb der Grenzen Fehler beim Versuch, in das Array "encData1" hinzufügen und kann nicht herausfinden, warum. Es befindet sich in der Nähe des Codes, und Hilfe wäre willkommen. Ich habe versucht, einige Anweisungen hinzuzufügen, um die Größe der Arrays auszudrucken, und sie kommen alle mit 64 Zeichen heraus, aber ich bekomme einen Index außerhalb des zulässigen Bereichs bei 63, was für mich keinen Sinn ergibt.Kann dieser IndexOutOfBounds-Fehler nicht ausgegeben werden?

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

Sie Array IP hat 63 Elemente, es fehlt das letzte Element. Sollte sein ... '63,55,47,39,31,23,15, 7};' – user1155120

+0

Völlig übersehen, Danke, Mann arbeitet jetzt anständig. :) – Elmangos

Antwort

0

Ihr iP Int Array hat nur 63 Elemente (von 0 bis 62 indiziert).

+0

Danke Mann, hätte wohl zuerst haha ​​zählen sollen: D – Elmangos

Verwandte Themen