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参数的含义的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:“mcrypt_decrypt():IV 参数必须与块大小一样长”
.NET WebService 加密 -> PHP 解密错误:mcrypt_encrypt(): IV 参数必须与块大小一样长