Intereting Posts
Обработка ошибок в следующем SQL-запросе Исключить папки из рекурсии в рекурсивном каталоге iterator php Синтаксис PHP. Булевы операторы, тернарный оператор и JavaScript Как включить пользователя в любом месте в списке? ZF2 Удалить столбцы в запросе PHP заменяет все происшествия определенного шаблона строки в тексте в формате HTML Каковы хорошие, быстрые постоянные параметры хранения данных key-> value? Каков максимальный размер массива в PHP? Проблемы с Live-Edit CArrayDataProvider с разбиением на страницы CGridView Yii Автоматическое добавление атрибутов ширины и высоты в теги <img> с помощью функции PHP Как я могу поместить результаты подготовленного оператора MySQLi в ассоциативный массив? Возвращать даты текущей недели календаря как массив в PHP5 Как сделать быстрое суждение и назначение без isset ()? Как генерировать графики и диаграммы из базы данных mysql в php

PHP и MYSQL: использование хэша bcrypt и проверка пароля с базой данных

Я использую метод г-на Эндрю Мура ( как вы используете bcrypt для хеширования паролей в PHP? ) Пароля пользователя хэширования. Я сделал, что у меня есть страница регистрации, и она использует

$bcrypt = new Bcrypt(12); $pass = $_POST['password']; //register password field $hash= $bcrypt->hash($pass); // then inserts $hash into database with users registered email (I've checked my mysql database and it indeed has an hashed item 

Затем у меня есть страница входа в систему, состоящая из полей электронной почты и пароля. Я думал, что адреса электронной почты уникальны в моей базе данных. Поэтому, имея в виду это, я создал сценарий, где он сначала проверяет адрес электронной почты пользователей, а затем, если существует существующий, проверьте хэш-пароль с этим

 $bcrypt = new Bcrypt(12); $email = $_POST['email']; //from login email field $pass_l = $_POST['password']; // from login password field $hash_1= $bcrypt->hash($pass_1); $chk_email= $dbh->prepare("SELECT password FROM table WHERE email = ?"); $chk_email -> execute(array($email)); while($row = $chk_email->fetch(PDO::FETCH_ASSOC)){ $chk_pass = $row['password']; //inside a while loop to get the password $pass_isGood = $bcrypt->verify($hash_1, $chk_pass); var_dump($pass_isGood); // I'm getting false } 

Я не уверен, что я делаю неправильно, я должен стать правдой. И я установил табличное поле для text или даже varchar(256)

Используя класс Andrew Moore , вам нужно вызвать метод verify() класса verify() чтобы убедиться, что пароль пользователя соответствует хешу. Два параметра, которые вы передаете ему, – это пароль открытого текста, введенный пользователем, и хэш, который вы храните в базе данных.

Кажется, вы передали второй хэшированный пароль для verify() , а потому он не работает. Передайте пароль открытого текста в качестве первого аргумента.

Поэтому просто чтобы быть явным и основываться на ответе Майкла (так как я смотрел на решение Эндрю Муоре тоже):

вместо этого:

 $hash_1= $bcrypt->hash($pass_1); $chk_pass = $row['password']; //inside a while loop to get the password $pass_isGood = $bcrypt->verify($hash_1, $chk_pass); 

ты нуждаешься в этом:

 $pass_l = $_POST['password']; $chk_pass = $row['password']; //inside a while loop to get the password $pass_isGood = $bcrypt->verify($pass_l, $chk_pass); //notice how 1st parameter of verify(is the text input and not its hashed form