strcmp vs. == vs. === 在 PHP 中用于检查哈希相等性
我使用PHP中的哈希密码,并试图在执行密码检查时找出测试结果哈希相等性的最安全方法。crypt()
我可以看到三个选项:
选项 1 - 双相等
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
选项 2 - 三重等于
function checkPassword($hash, $password)
{
return crypt($password, $hash) === $hash;
}
选项 3 - strcmp()
function checkPassword($hash, $password)
{
return strcmp(crypt($password, $hash), $hash) === 0;
}
我的直觉告诉我,由于缺乏类型检查,选项1是一个坏主意,并且选项2或3可能更好。但是,我无法确定是否存在特定情况或会失败的情况。为此目的,哪个最安全?===
strcmp