我想要加密的字符串,它的一部分是XOR運算IV字符串文本。 具有計算器一些困難,我結束了在那裏一個人給了下面的代碼後:XOR兩個字符串在JAVA
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」之間進行XOR時,我得到:「aaaaaaaaaaaa」。 其次,兩個相同的字符串的結果爲「AAAA ......」 - 「一」 S串....
所以這兩個問題是:
- 爲什麼導致字符串變長?
- 爲什麼相同字符串之間異或的結果由「a」列表組成?
這是功課,得到任何幫助。
Thanx!
爲什麼......你使用'sun.misc.BASE64Decoder'? – trutheality 2012-04-18 19:27:45
我不是。它帶有代碼,所以我把它留在那裏,直到確定我不需要它。 – 2012-04-18 19:51:47
也許這將幫助你:http://stackoverflow.com/questions/1205135/how-to-encrypt-string-in-java – yegor256 2012-12-26 16:01:29