少しの暗号化と復号化、および des による雪崩効果に取り組んでいます。しかし、それをテストしているときに、配列が範囲外であるという少しの問題に遭遇しました。問題が発生している関連コードは次のとおりです。
public static void main(String[] args){
//take original plain text and get the ct to compare all other ct's to
String plaintxt = "Coolbro!";
byte [] ptAr = getBytes(asciiToHex(plaintxt));
byte [] ctFinal = encrypt(ptAr);
byte [] ptCopy;
byte [] newCt;
int differences =0;
for ( int j = 63; j >= 0; j--){
ptCopy = flip(ptAr, 2);
newCt = encrypt(ptCopy);
differences = diff(ctFinal,newCt);
System.out.println(differences);
}
public static byte [] flip(byte [] a, int position){
byte[] copy = a;
String temp = "";
String tempf = "";
for(int i = 0; i <= a.length; i++){
temp = temp + String.format("%8s", Integer.toBinaryString(a[i])).replace(' ', '0');
}
if(temp.charAt(position) == '1'){
for(int i = 0; i < temp.length(); i++){
if (i == position){
tempf += "0";
}
else{
tempf += temp.charAt(i);
}
}
}
else{
for(int i = 0; i < temp.length(); i++){
if (i == position){
tempf += "1";
}
else{
tempf += temp.charAt(i);
}
}
}
temp = Integer.toHexString(Integer.parseInt(tempf, 2));
byte [] fin = temp.getBytes();
return fin;
}
フリップは、指定された位置で指定されたバイト配列の単一ビットを反転することになっています(動作し、junit テストに合格します)。
すべての差分は、2 つの暗号テキスト配列で異なる位置がいくつあるかを示します。それも機能します。
しかし、何らかの理由で私はここで問題を抱えています
ptCopy = flip(ptAr, 2);
私は ptAr が許容可能なバイト配列であることを知っているので、エラーをスローする処理が表示されません。これらは、取得しているエラーです。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at AvalancheUtilities.flip(AvalancheUtilities.java:47)
at AvalancheUtilities.main(AvalancheUtilities.java:17)
それを修正する方法はありますか?どこから来たの?