0

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

先谢谢了。

4

1 回答 1

1

ECB 模式不使用 IV,因此无论您输入什么或每次都不同,都无关紧要。本身的文档mcrypt_encrypt间接地这样说:

iv

用于 CBC、CFB、OFB 模式下的初始化,以及 STREAM 模式下的某些算法中。如果您不提供 IV,而算法需要它,则该函数会发出警告并使用所有字节都设置为“\0”的 IV。

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

于 2013-11-22T21:15:40.053 回答