PHP:失败时mcrypt_decrypt()会返回什么


PHP: What does mcrypt_decrypt() return on failure

PHP mcrypt_decrypt()定义为

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

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

我使用的是 PHP 5.5.9。

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

但是如何检测以前的PHP版本中的故障?

在 5.6.0 之前,失败将返回false 。您误读了更新日志:

不再接受无效的keyiv大小。 mcrypt_decrypt()现在将引发警告,如果输入无效,则返回FALSE

"

失败"和"不是有效的mcrypt_encrypt字符串"不是一回事......

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

但是,实际上并没有无效的加密字符串 - 使用未经身份验证的密码模式时无法检测到(并且 mcrypt 不支持内置身份验证附带的密码模式)。

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