Проблема с Bcrypt не проверяется правильно

Я использую скрипт, который написал ircmaxell с именем password_compat . Я думал, что правильно выполнил его инструкции, но я не могу проверить свой пароль с помощью password_verify($password, $hash) .

Хешированный пароль, сохраненный в моей базе данных;

 $2y$10$zYpSzIj7kTPv3H7wDI/uXSYqi1se46b38uumP6SM4XGMmsjU3q 

Я использую PDO, чтобы захватить мой хешированный пароль и использовать password_verify($password, $hash) чтобы сравнить то, что отправляет логин. Я понимаю, что BRCYPT не является хеширующей функцией, поэтому password_verify($password, $hash) сделает это волшебство. Я понятия не имею, как создается соль, но я бы подумал, что она создает обычную соль для каждого нового пароля, но как она может сравнить ее с моим сохраненным паролем, меня озадачивает. Как он соответствует правильной соли с паролем? Все это не спасло соль в моей базе данных, что меня смущает, lol. Вот код, который я использую;

Bcrypt

 if($login->verifyip($_SERVER['REMOTE_ADDR'])) { require_once 'password.php'; //password_compat supplied file $username = $_POST['username']; $password = $_POST['password']; $dbpassword = $login->GetPassword($username); // pull saved password from db // verify posted password with saved password if(password_verify($dbpassword, $password)) { echo 'verified'; } else { echo 'not verified'; } } 

PDO

 public function GetPassword($username) { $passwordSQL = 'CALL get_password(:_user)'; // using stored procedure try { $pdo = new PDO('my login stuff'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $password = $pdo->prepare($passwordSQL); $password->bindParam(':_user',$username); $password->execute(); $fetch = $password->fetchColumn(0); $password->closeCursor(); return $fetch; } catch(PDOException $e) { return 'error' . $e->getMessage(); exit(); } } 

Я удалил $ хэш, как предложил блендер.

Спасибо, что посмотрели 🙂

аргументы password_verify противоположны:

 password_verify($password, $dbpassword) 

Что касается того, как это работает, хэш имеет такую ​​форму:

 $<algorithm>$<cost>$<salt>/<hash> 

Итак, из хэша:

 $2y$10$zYpSzIj7kTPv3H7wDI/uXSYqi1se46b38uumP6SM4XGMmsjU3q 

Вы можете видеть, что стоимость равна 10 , соль – zYpSzIj7kTPv3H7wDI а bcrypt(salt + password)uXSYqi1se46b38uumP6SM4XGMmsjU3q .

password_verify извлекает эту информацию из предоставленного хеша и просто проверяет, есть ли bcrypt(salt + password) == hash .