【问题标题】:Decrypting Text Using AES in CBC Mode在 CBC 模式下使用 AES 解密文本
【发布时间】:2011-06-07 08:54:45
【问题描述】:

我有这个代码

$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 编码和解码,所以我认为问题可能出在其他地方。

【问题讨论】:

    标签: php encryption aes mcrypt


    【解决方案1】:

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 2013-04-06
      • 2017-09-28
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2021-08-13
      相关资源
      最近更新 更多