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,因此在解密开始时需要再次初始化。另外,您应该注意,在正常情况下,加密之后再解密相同的数据是永远不会发生的;)我懂了。是的,我同意,这段代码只是最简单的形式,不是真正的实现。再次感谢!