使用SecureRandom字节流进行XORing有哪些缺点

时间:2016-08-30 05:31:20

标签: java encryption xor

非常接近已经问过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]));
}

由于这种方法不是最常用的对称加密,它有什么问题?

1 个答案:

答案 0 :(得分:1)

有几个问题,但主要问题是如果你只有 - 随机性,那么你有 - 安全性。另一方面,真随机不会基于种子给出相同的字节,因此您必须保持整个密钥流方便。

在这个例子中,不要让SecureRandom欺骗你。攻击SHA1PRNG算法比攻击AES等真正的加密要容易得多。