我敢肯定这个问题没有唯一的答案,只是想找出一种通用的方法。
使用 Java 1.4.2,我需要生成一个 key 和 IV 以用于对称算法。这些值将通过安全通道预先共享给接收者。
我可以使用 KeyGenerator.keyGenerate() 生成的 key 。但除非我遗漏了它,否则没有生成随机 IV 的函数。
我是否应该做一些完全随意的事情,比如从内存中提取 16 个随机字节?或者是否有生成足够随机的初始化 vector 的首选方法?
最佳答案
这取决于您使用密码的模式。如果您使用 CBC,来自 SecureRandom
的字节是最简单的,也可能是最安全的……只要您的 RNG 是好的。
大多数 Java 提供程序会自动生成所需的参数,但为了让您弄清楚选择了什么,您需要了解密码和模式。例如,如果您正在使用需要 IV 的模式,您将执行如下操作:
cipher.init(Cipher.ENCRYPT_MODE, secret);
IvParameterSpec spec =
cipher.getParameters().getParameterSpec(IvParameterSpec.class);
byte[] iv = spec.getIV();
这允许提供者选择合适的方法来生成 IV 本身。但是,如果您在使用 ECB 模式的密码上使用相同的方法,它将失败。
使用计数器模式显然需要非常小心,避免重复使用计数器。
关于java - 我应该如何生成初始化 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785555/