strcmp vs. == vs. === в PHP для проверки равенства хешей
я использую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
потерпит неудачу под. Что наиболее безопасно для этой цели?