首页 > 解决方案 > 如何修复分组密码实现错误

问题描述

解密时,我每三行才进入正确的初始状态

我将源文本分成 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);

我将不胜感激

标签: javaencryption

解决方案


推荐阅读