Я использую crypt()
для хэш-паролей в PHP и пытаюсь разработать самый безопасный способ проверки равенства полученного хэша при выполнении проверок пароля.
Есть три варианта, которые я могу видеть:
Вариант 1 - двойные равные
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
Вариант 2 - Triple Equals
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
завершится сбой. Что безопаснее для этой цели?