Я использую API хеширования паролей PHP для хеширования и проверки своих паролей на сайте, который я создаю, однако всякий раз, когда я пытаюсь проверить свой пароль, он всегда возвращает false.
У меня есть класс User, который устанавливает пароль до того, как они будут вставлены в базу данных:
public function set__password($passwd) {
self::$password = password_hash($passwd, PASSWORD_BCRYPT, array('cost' => 12));
}
Если имя пользователя и адрес электронной почты уникальны, вставляется новая строка пользователя - после проверки моей базы данных у меня есть то, что кажется допустимой строкой BCRYPT для моего пароля:
$2y$12$lTMEP0wevDEMX0bzStzoyOEzOTIAi3Hyhd3nYjGwzbI
Чтобы проверить мой пароль, я запускаю следующий скрипт:
$username = $_POST['username'];
$password = $_POST['password'];
$DB = Database::getInstance();
// Get the stored password hash
$res = $DB->run__query('SELECT password FROM users WHERE username = "' . $username . '"');
$hash = $res[0]['password'];
// Do the passwords match?
if(password_verify($password, $hash)) {
echo 'success';
} else {
echo 'failed';
}
$hash
относится к строке, приведенной выше, однако, когда я затем вызываю password_verify($password, $hash)
, где $password
— это текстовый пароль, полученный из моего поля ввода, я всегда получаю значение false.
$hash
извлеченным из базы данных тем же самым значением, что иself::$password
, помещенное в базу данных...? Типичная проблема: слишком короткие столбцы. - person deceze♦   schedule 14.07.2014PASSWORD_BCRYPT
требует длины поля 60 из того, что я прочитал, я установил столбец в БД на это, поэтому я не думаю, что это должно быть проблемой - я еще раз проверю это, хотя - person Alex   schedule 14.07.2014$DB->run__query()
. Конечно, он работает с таким именем пользователя, как bob, но не подходит для таких имен пользователей, какBobby"; DROP TABLE users; --"
, не так ли? - person Elias Van Ootegem   schedule 14.07.2014