java - 我应该如何生成初始化 vector ?

标签 java encryption cryptography

我敢肯定这个问题没有唯一的答案,只是想找出一种通用的方法。

使用 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/

相关文章:

java 枚举新列表创建未按预期工作

java - iOS椭圆曲线 key 用于Java后端加密解密

c# - 使用 C# 中的 pem 文件使用带有密码私钥的 RSA 解密消息

java - Java中的DH key 协议(protocol): why generated keys are moSTLy equal for both parties?

java - RSA block 失败的数据过多。什么是 PKCS#7?

java - 如何在 MyBatis 中使用结果集填充参数映射

java - jboss 没有建立 hibernate/JNDI 连接

IOS 导出合规信息已更改

java - 无法让 AES/GCM 使用密码

java - 为什么 FileReader 和 FileWriter 使用一个 INT 变量来读写?