三重DES初始化矢量


Triple DES initialization vector

我有一个使用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模式是一个非常糟糕的选择。不要使用它。