【发布时间】:2011-05-08 04:03:03
【问题描述】:
我使用以下函数解密服务器上的数据:
function decrypt($key, $text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
我已经阅读了很多关于不使用 ECB 的信息(并且知道它已被弃用,所以想切换到 CBC。只需将模式切换为:
function decrypt($key, $text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_CBC, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND)));
}
但是不起作用。不会产生错误,但返回的数据仍然是加密的。
我错过了什么?
更新的代码 - 仍然有错误:
$key = "hello";
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
function encrypt($key, $text) {
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv)));
}
function decrypt($key, $text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($text), MCRYPT_MODE_CBC, $iv));
}
$text = 12345;
echo "Plain Number : " . $text . "<br><br>";
$encrypted = encrypt($key, $text);
echo "AES Number : " . $encrypted . "<br><br>";
echo "Plain Number : ". decrypt($key, $encrypted) . "<br><br>";
这应该可以工作 - 但它会返回错误:
块大小在
blocksize in> 警告:mcrypt_encrypt()
[function.mcrypt-encrypt]:IV 参数必须与 blocksize inblocksize in
块大小在
【问题讨论】:
-
返回的数据和你传入的一样吗?如果是,那么解密功能有问题。否则它可以正常工作,而您只是使用了错误的密钥/IV,并且将垃圾回收了。
-
@Marc B - 是的,事实上我在同一页面上运行加密和解密,即使是为了确保信息是好的,但我得到了错误。我将尝试看看下面的一些建议会有所作为。