php password_hash и password_verify проблемы не совпадают

Я пытаюсь создать новую функцию из 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.'; } ?> 

ВЫВОД:

Пароль действителен!