我有一个使用php生成加密数据的工作代码:
$cipher_alg = MCRYPT_TRIPLEDES;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);
$encrypted_string = mcrypt_encrypt($cipher_alg, $pKey, $string, MCRYPT_MODE_ECB, $iv);
问题是,我多次运行此代码,如果相同的输入并且始终为$encrypted_string
提供相同的输出,为$iv
提供不同的输出。
那么,如果IV发生变化,为什么我的加密数据总是一样的?
先谢谢。
答案 0 :(得分:1)
ECB mode不使用IV,因此无论您传入的内容是什么,或者每次都不同。 mcrypt_encrypt
本身的文档间接地这样说:
<强>
iv
强>用于CBC,CFB,OFB模式的初始化,以及STREAM模式下的某些算法。如果你没有提供静脉输液,那就是 对于算法所需,该函数发出警告并使用IV 将其所有字节设置为“\ 0”。
您需要使用可链接模式(CBC等)来查看每次迭代的不同结果 - 通常,ECB模式是一个非常糟糕的选择。不要使用它。