非常接近已经问过XOR Encryption in Java: losing data after decryption:
使用种子SecureRandom生成的字节流进行xoring看起来简单快速,例如:
byte[] data = <data to encrypt>
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
random.setSeed("myPassword".getBytes(Charset.forName("UTF-8")));
byte[] mask = new byte[1];
for(int ii = 0; ii < len; ii++) {
sr.nextBytes(mask);
data[ii] = (byte)(0xFF & (data[ii] ^ mask[0]));
}
由于这种方法不是最常用的对称加密,它有什么问题?
答案 0 :(得分:1)
有几个问题,但主要问题是如果你只有伪 - 随机性,那么你有伪 - 安全性。另一方面,真随机不会基于种子给出相同的字节,因此您必须保持整个密钥流方便。
在这个例子中,不要让SecureRandom
欺骗你。攻击SHA1PRNG
算法比攻击AES
等真正的加密要容易得多。