在CBC模式下使用AES解密文本

时间:2011-01-11 18:33:49

标签: php encryption aes mcrypt

我有这段代码

$td = \mcrypt_module_open(\MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
            \mcrypt_generic_init($td, '12345678901234561234567890123456', '12345678901234567890123456789012');
            echo mdecrypt_generic(
                    $td,
                    \mcrypt_generic($td, "Testing")
            );

但结果是]Ië{ŒÕÌe} Q™‡ÿòø¬ÀÿÙ®»/> 为什么文本没有被正确解密?我也尝试在正确的位置进行base_64编码和解码,所以我认为问题可能出在其他地方。

2 个答案:

答案 0 :(得分:1)

您应该在解密之前重新初始化,即再次调用crypt_generic_init。 此外,加密完成后,您应该调用mcrypt_generic_deinit。

答案 1 :(得分:0)

这只是一个疯狂的猜测,但由于你正在使用CBC模式,你可能需要重置iv才能解密它。

$td = \mcrypt_module_open(\MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$key = '12345678901234561234567890123456';
$iv =  '12345678901234567890123456789012';

\mcrypt_generic_init($td, $key, $iv);
$encrypted = \mcrypt_generic($td, "Testing");

\mcrypt_generic_init($td, $key, $iv);
echo \mdecrypt_generic($td, $encrypted);