我正在尝试加密一个字符串,其中一部分是用 IV 字符串对文本进行异或。在遇到一些困难之后,我最终进入了 stackoverflow,其中一个人给出了以下代码:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
public class StringXORer {
public String encode(String s, String key) {
return base64Encode(xorWithKey(s.getBytes(), key.getBytes()));
}
public String decode(String s, String key) {
return new String(xorWithKey(base64Decode(s), key.getBytes()));
}
private byte[] xorWithKey(byte[] a, byte[] key) {
byte[] out = new byte[a.length];
for (int i = 0; i < a.length; i++) {
out[i] = (byte) (a[i] ^ key[i%key.length]);
}
return out;
}
private byte[] base64Decode(String s) {
try {
BASE64Decoder d = new BASE64Decoder();
return d.decodeBuffer(s);
} catch (IOException e) {throw new RuntimeException(e);}
}
private String base64Encode(byte[] bytes) {
BASE64Encoder enc = new BASE64Encoder();
return enc.encode(bytes).replaceAll("\\s", "");
}
}
除了 2 个问题外,它似乎有效:结果字符串变得更长。当试图在“abcdefgh”和“abcdefgh”之间进行异或时,我得到:“aaaaaaaaaaaa”。其次,两个相同字符串的结果变为“aaaa....” - 字符串“a”s....
所以这两个问题是:
- 为什么结果字符串变长了?
- 为什么相同字符串之间的异或结果由“a”列表组成......?
这是作业,感谢任何帮助。
谢谢!