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

Php 在CBC模式下使用AES解密文本,php,encryption,aes,mcrypt,Php,Encryption,Aes,Mcrypt,我有这个密码 $td = \mcrypt_module_open(\MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, ''); \mcrypt_generic_init($td, '12345678901234561234567890123456', '12345678901234567890123456789012'); echo mdecrypt_generic( $td

我有这个密码

$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Œ213; e}Q™‡ÿòòÀÿÙ»/›
为什么文本没有被正确解密?我还尝试在正确的位置对base_64进行编码和解码,因此我认为问题可能出在其他地方。

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

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

这只是一个猜测,但由于您使用的是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);

这只是一个猜测,但由于您使用的是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);

这就是对称密码在CBC模式下的工作原理——它们不断地改变IV,因此在解密开始时需要再次初始化。另外,您应该注意,在正常情况下,加密之后再解密相同的数据是永远不会发生的;)我懂了。是的,我同意,这段代码只是最简单的形式,不是真正的实现。再次感谢!这就是对称密码在CBC模式下的工作原理——它们不断地改变IV,因此在解密开始时需要再次初始化。另外,您应该注意,在正常情况下,加密之后再解密相同的数据是永远不会发生的;)我懂了。是的,我同意,这段代码只是最简单的形式,不是真正的实现。再次感谢!