私はcrypt()
PHPでパスワードをハッシュするために使用しており、パスワードチェックを実行するときに結果のハッシュの同等性をテストする最も安全な方法を見つけようとしています。
私が見ることができる3つのオプションがあります:
オプション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
はわかりません。この目的のために最も安全なのはどれですか?