Я создал пароль, используя password_hash, например:
$password = password_hash('password123', PASSWORD_DEFAULT);
Это хранится в базе данных MySQL в столбце с varchar (60).
В моей форме входа я использую:
if(password_verify($password, $foundUser->Password){
/*login*/
}
где $password
— это ввод открытого текста из формы входа, а $foundUser->Password
— это хеш, который хранится в базе данных, но функция password_verify()
всегда возвращает false.
Я проверил свои входы, используя следующий код:
echo "Password: {$password} <br>";
echo "Found password: ".$foundUser->Password."<br>";
который выводит:
Password: password123
Found password: $2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa
поэтому я достаточно уверен, что ввожу правильный пароль и получаю правильный хэш из своей базы данных.
Я просмотрел ссылки в этот вопрос для ответов, но не т заставил это работать еще. У кого-нибудь есть идеи, почему password_verify() возвращает false?
PASSWORD_DEFAULT
предназначен для изменения с течением времени по мере добавления в PHP новых и более надежных алгоритмов. По этой причине длина результата использования этого идентификатора может меняться со временем. Поэтому рекомендуется хранить результат в столбце базы данных, который может превышать 60 символов (255 символов было бы хорошим выбором). – Просто для начала… Вы проверили, что значение, полученное из вашей базы данных, точно такой же, как уpassword_hash
…? - person deceze♦   schedule 01.02.2017PASSWORD_DEFAULT
использует BCrypt, не так ли, поэтому он должен всегда быть строкой из 60 символов. - person CD001   schedule 01.02.2017password_hash()
и скопировав его прямо в базу данных в виде открытого текста. Когда я повторяю это, он печатает точно такой же код, который сгенерировалpassword_hash()
. - person dylanrholloway   schedule 01.02.2017password_verify('password123', '$2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa')
=> он вернул true. Так что ваш код кажется в порядке. Какую версию PHP вы используете для проверки пароля? - person martinstoeckli   schedule 01.02.2017var_dump($password)
? Вы настроили MySQL для отклонения усечения данных? - person Álvaro González   schedule 01.02.2017var_dump($password)
выводитstring(11) "password123"
- person dylanrholloway   schedule 01.02.2017$password = password_hash('password123', PASSWORD_DEFAULT);
создает нехешированную строку из 11 символов? - person Álvaro González   schedule 01.02.2017