文字列を暗号化しようとしています。その一部は、テキストを IV 文字列で XOR することです。いくつかの困難があった後、私はスタックオーバーフローになり、男が次のコードを与えました:
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」が得られました。次に、2 つの同一の文字列の結果は "aaaa...." - "a" の文字列....
したがって、2つの質問は次のとおりです。
- 結果の文字列が長くなるのはなぜですか?
- 同一文字列間の XOR の結果が "a" のリストで構成されるのはなぜですか?
これは宿題です。助けていただければ幸いです。
ありがとう!