1

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

简化代码提取:

$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”会更好吗?

4

1 回答 1

0

这是初始化向量:

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

于 2011-05-02T18:37:01.393 回答