我正在使用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'会更好吗?