有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何修复分组密码实现错误

解密时,我每三行就得到正确的初始状态

我将源文本分解为64位的块,然后在它们之间进行替换,但是解密时,输出的文本与原始文本不同。只有第三排是正确的

byte[] bin = text.getBytes("UTF8");
    ArrayList<Byte> binary = new ArrayList<Byte>();
    for (int i=0; i<bin.length; i++){
        binary.add(bin[i]);
    }
    if(binary.size()%64!=0){
        while (binary.size()%64 !=0){
            binary.add(bin[0]);
        }
    }
    ArrayList<Byte> list =new ArrayList<>();
    for(int i=0; i<binary.size(); i++){
        if (i%64!=0){
            list.add(binary.get(i));
        }
        else{
               for(int l = 0; l < list.size()/2; l++) {
                    if (list.get(l) >= list.get(list.size()-1-l)) {
                        list.set(l, list.get(list.size()-1-l));
                        list.set(list.size()-1-l, list.get(l));
                }
 }

            for(int p = 0; p < list.size(); p++) {
                itogovy.add(list.get(p));
            }
            list.clear();
        }

    }
    byte[] result = new byte[itogovy.size()];
    for (int v=0; v<itogovy.size(); v++ ){
        result[v]=itogovy.get(v);
    }
    sun.misc.BASE64Encoder unsupportedEncoder = new sun.misc.BASE64Encoder();
    sunEncoded = unsupportedEncoder.encode(result);
    System.out.println(sunEncoded);

分别解密

 byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(ss);
    ArrayList<Byte> binary = new ArrayList<Byte>();
    for (int i=0; i<dec.length; i++){               
        binary.add(dec[i]);
    }
    ArrayList<Byte> list =new ArrayList<>();
    ArrayList<Byte> itogov =new ArrayList<>();
    for(int i=0; i<binary.size(); i++){
        if (i%64!=0){
            list.add(binary.get(i));
        }
        else{
            for(int l = 0; l > list.size()/2; l++) {
                if (list.get(l) <= list.get(list.size()-1-l)) {
                    list.set(l, list.get(list.size()-1-l));
                    list.set(list.size()-1-l, list.get(l));

                }
            }
            for (int q=0; q<list.size(); q++){
                itogov.add(list.get(q));
            }
            list.clear();
        }
    }
    while (itogov.get(itogov.size()-1)==itogov.get(itogov.size()-2)){
        itogov.remove(itogov.size()-1);
    }
    itogov.remove(itogov.size()-1);
    byte[] result = new byte[itogov.size()];
    for(int i = 0; i < itogov.size(); i++) {
        result[i] = itogov.get(i);
    }
    //System.out.println((byte) k.toString().length()/10);
    String sunDecoder = new String(result, "UTF8");
    System.out.println(sunDecoder);

我将非常感激你的帮助


共 (0) 个答案