Я пытаюсь создать новую функцию из PHP 5.5 с именем password_hash ().
Независимо от того, что я делаю, $ hash и $ password не совпадают.
$password = "test"; $hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e"; if (password_verify($password, $hash)) { echo "Success"; } else { echo "Error"; }
Проблема с вашим кодом заключается в том, что вы используете двойные кавычки "
вместо одиночных кавычек '
при работе с хешем.
При назначении:
$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
Это заставляет php думать, что у вас есть переменная с именем $2y
а другая называется $10
и, наконец, третья называется $fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e
. Это, очевидно, не так.
Я заметил, что при включении ошибки сообщается, что ошибка:
Примечание. Неопределенная переменная: fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e
Был брошен PHP.
Замените все свои двойные кавычки метками одиночной кавычки для исправления.
Например
$hash = '$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e';
Обрабатывает весь хеш как литеральную строку вместо строки со встроенными переменными.
У меня была аналогичная проблема с password_verify (). Ошибка в моем случае, это было то, что я объявил мое поле пароля в базе данных как varchar (30), но хэш равен или длиннее до 60 символов.
Прекрасно работает для меня.
<?php $hash=password_hash("rasmuslerdorf", PASSWORD_DEFAULT); if (password_verify('rasmuslerdorf', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } ?>
ВЫВОД:
Пароль действителен!