我有一个使用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发生变化,为什么我的加密数据总是一样呢?
ECB模式不使用IV,所以传入的内容或每次传入的内容不同都无关紧要。mcrypt_encrypt
的文档本身间接地说明了这一点:
iv
用于CBC、CFB、OFB模式下的初始化,以及STREAM模式下的某些算法中。如果你不提供静脉注射算法所需的,该函数会发出警告并使用IV其所有字节都设置为"''0"。
您需要使用可链接模式(CBC等)来查看每次迭代的不同结果——通常,ECB模式是一个非常糟糕的选择。不要使用它。