三重DES初始化向量

时间:2013-11-22 21:13:21

标签: php aes des tripledes

我有一个使用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发生变化,为什么我的加密数据总是一样的?

先谢谢。

1 个答案:

答案 0 :(得分:1)

ECB mode不使用IV,因此无论您传入的内容是什么,或者每次都不同。 mcrypt_encrypt本身的文档间接地这样说:

  

<强> iv

     

用于CBC,CFB,OFB模式的初始化,以及STREAM模式下的某些算法。如果你没有提供静脉输液,那就是   对于算法所需,该函数发出警告并使用IV   将其所有字节设置为“\ 0”。

您需要使用可链接模式(CBC等)来查看每次迭代的不同结果 - 通常,ECB模式是一个非常糟糕的选择。不要使用它。