【问题标题】:PHP: What does mcrypt_decrypt() return on failurePHP:失败时 mcrypt_decrypt() 会返回什么
【发布时间】:2015-05-14 02:23:10
【问题描述】:

PHP mcrypt_decrypt() 定义为

string mcrypt_decrypt ( string $cipher , string $key , string $data , 
                        string $mode [, string $iv ] ) 

如果$data 不是有效的mcrypt_encrypted 字符串,返回值是什么?

我使用的是 PHP 5.5.9。

我看到 PHP 5.6.0 已经包含了Return FALSE on failure

但是在以前的 PHP 版本中如何检测失败呢?

【问题讨论】:

  • 我猜它返回false,他们只是忘了在文档中这么说。

标签: php mcrypt


【解决方案1】:

在 5.6.0 之前,失败 will return false。您误读了更新日志:

不再接受无效的keyiv 大小。 mcrypt_decrypt() 现在将抛出警告并返回 FALSE如果输入无效。

【讨论】:

    【解决方案2】:

    “失败”和“不是有效的mcrypt_encrypted 字符串”不是一回事...

    失败可能是由于使用了不受支持的算法/模式、libmcrypt 或 PHP 本身的内部错误等。在这种情况下,它将返回 FALSE。

    但是,实际上并没有无效的加密字符串之类的东西 - 这不是在使用未经身份验证的密码模式时可以检测到的东西(并且 mcrypt 不支持内置身份验证的模式)。

    相反,您应该自己验证密文的有效性,并且必须在将密文传递给mcrypt_decrypt() 之前进行。你可以通过使用 MAC 来做到这一点,这本身就是一个很长的话题,所以你真的应该用谷歌搜索它......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 2011-04-16
      • 2010-10-12
      • 1970-01-01
      • 2013-06-27
      • 2011-11-02
      • 2013-02-25
      • 2011-01-18
      相关资源
      最近更新 更多