解密时,每三行只有一次正确的初始状态
我将源文本分成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);
我将非常感谢您的帮助