Мой метод checkPassword () каждый раз возвращает false, хотя я знаю, что это правильно. Я использовал тот же метод для хеширования / засолки, что и для проверки, и я убедился, что все так, как должно быть, но все равно возвращает false.
Я использую ‘Bcrypt-PHP-Class’, найденный здесь, чтобы хэшировать все https://github.com/cosenary/Bcrypt-PHP-Class
Вот как я хэшировал пароль:
$password = Bcrypt::hashPassword($_POST['password']);
Вот как я проверяю пароль:
$check = Bcrypt::checkPassword($password, $user['password']);
($ user — массив данных пользователя, таких как имя пользователя, пароль, адрес электронной почты и т. д.)
$ check все еще ложно, даже после проверки, что все правильно. Там тоже нет ошибок.
Спасибо заранее всем, кто может мне помочь.
Методы шифрования:
public static function checkPassword($password, $storedHash) {
if (version_compare(PHP_VERSION, '5.3') < 0) {
throw new Exception('Bcrypt requires PHP 5.3 or above');
}
self::_validateIdentifier($storedHash);
$checkHash = crypt($password, $storedHash);
return ($checkHash === $storedHash);
}
public static function hashPassword($password, $workFactor = 0) {
if (version_compare(PHP_VERSION, '5.3') < 0) {
throw new Exception('Bcrypt requires PHP 5.3 or above');
}
$salt = self::_genSalt($workFactor);
return crypt($password, $salt);
}
Почему вы не используете password_hash ()? (http://php.net/manual/fr/function.password-hash.php)
И загляните в свою БД, если поле пароля — это varchar и минимум 60 символов (для password_hash, не знаю для Bcrypt-PHP-класса)
РЕДАКТИРОВАТЬ :
Bcrypt-PHP-Class создает хеш из 60 символов, проверьте, есть ли у ваших полей этот минимум
Других решений пока нет …