mcrypt_generic_init:iv参数的含义

Posted

技术标签:

【中文标题】mcrypt_generic_init:iv参数的含义【英文标题】:mcrypt_generic_init: Meaning of the iv parameter 【发布时间】:2011-08-17 04:26:32 【问题描述】:

我正在使用 php mcrypt 库审查部分代码,以使用 Blowfish 密码加密一些二进制数据。基本上它在MCRYPT_MODE_CBC 模式下创建一个河豚描述符,然后调用mcrypt_generic_init 函数,其中iv 参数始终等于'12345678'。

简化代码提取:

$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, '12345678');

mcrypt-generic-init 函数的文档说明如下:

IV 通常应该具有算法块大小的大小,但您必须通过调用 mcrypt_enc_get_iv_size() 来获取大小。欧洲央行忽略了IV。 IV 必须存在于 CFB、CBC、STREAM、nOFB 和 OFB 模式中。 它必须是随机且唯一的(但不是秘密)。必须使用相同的 IV 进行加密/解密。 如果您不想使用它,应将其设置为零,但不建议这样做。

我的问题是:

这个参数是干什么用的?使用 iv 参数的这种值是一个弱点吗?我不确定,因为据说它不一定是秘密的,所以攻击者可以通过某种方式获得它。如果它不是一个弱点并且这个参数的值是完全可以的,那么为什么不建议将它设置为零呢?硬编码一些伪随机字符串而不是'12345678'会更好吗?

【问题讨论】:

【参考方案1】:

这是初始化向量:

http://en.wikipedia.org/wiki/Initialization_vector

【讨论】:

以上是关于mcrypt_generic_init:iv参数的含义的主要内容,如果未能解决你的问题,请参考以下文章

Android 传递 IV 参数加密/解密文本

Laravel:“mcrypt_decrypt():IV 参数必须与块大小一样长”

索尼A7R IV和尼康Z6 II 参数对比

.NET WebService 加密 -> PHP 解密错误:mcrypt_encrypt(): IV 参数必须与块大小一样长

微信小程序 getUserProfile 获取用户信息 iv encryptedData 参数

微信小程序 getUserProfile 获取用户信息 iv encryptedData 参数