传递字节数组超出界限错误但它通过了junit测试

时间:2013-03-01 00:11:38

标签: java encryption bytearray bit-manipulation

使用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;
}

flip应该在给定位置翻转给定字节数组的一个位(并且它确实有效,通过了junit测试)。

所有差异确实表明两个密文文本数组中有多少个位置不同。这也有效。

但由于某些原因,我在这里遇到麻烦

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)

任何想法如何解决?来自

的idk

1 个答案:

答案 0 :(得分:2)

for方法中的第一个flip循环需要从

更改
for(int i = 0; i <= a.length; i++){

for(int i = 0; i < a.length; i++){

所以你不要跑掉阵列的末尾。