0

使用 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 测试)。

All diff 是否告诉两个密文数组中有多少位置不同。这也有效。

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

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它来自哪里

4

1 回答 1

2

您的方法中的第一个for循环flip需要更改,从

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

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

所以你不会跑出阵列的末端。

于 2013-03-01T00:14:14.933 回答