bob*_*obo 4 php encryption cryptography
从http://php.net/manual/en/function.mcrypt-encrypt.php,我看到以下代码使用AES和ECB模式下的IV,
<?php
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = "This is a very secret key";
$text = "Meet me at 11 o'clock behind the monument.";
echo strlen($text) . "\n";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
echo strlen($crypttext) . "\n";
?>
Run Code Online (Sandbox Code Playgroud)
但是从维基http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation,它说欧洲央行不需要IV.是否真的可以在ECB模式下使用带有IV的AES?在这种ECB模式下,与不使用时相比,额外的IV是否会提供更多的安全性?
ZZ *_*der 10
ECB不会在块之间执行链接,因此无法使用IV.mcrypt对所有模块使用相同的APi.对于ECB,IV被忽略,因为ECB模块具有以下定义的功能,
int _has_iv() { return 0; }
Run Code Online (Sandbox Code Playgroud)
首先,你没有任何地方可以把这个IV.ECB通过逐个获取明文块并使用密钥加密它们来生成相应的密文.没有地方可以使用IV.这就是理论所说的.
我不知道mcrypt_encrypt如何工作的细节,但我怀疑在使用ECB时它只是不使用IV.通过在提供不同IV的ECB中加密来尝试.如果结果相同,则该函数不使用IV.