【发布时间】:2016-08-30 14:39:28
【问题描述】:
非常接近已经问过XOR Encryption in Java: losing data after decryption:
与种子 SecureRandom 产生的字节流进行异或运算看起来简单快速,例如:
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]));
}
由于这种方法不是最常用的对称加密,它有什么问题?
【问题讨论】:
-
这实现了one time pad,这是一种不可能进行密码分析的方法。如果满足以下约束。 1)密钥与输入消息具有相同的长度(生成的随机字节数) 2)您再也不会使用相同的密钥(意味着生成的随机字节永远不会以相同的顺序排列)。在您的示例中,您永远不应该为
setSeed()使用相同的字节数组。有关保存原因的说明,请查看Attempt at cryptanalysis。
标签: java encryption xor