我crypt()
在 PHP 中使用哈希密码,并试图找出在执行密码检查时测试结果哈希是否相等的最安全方法。
我可以看到三个选项:
选项 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
将失败。为此目的,哪个最安全?