Позвольте мне угадать: у вас есть что-то вроде $2y$10$nUT/9PN0hVuk0q3ci6aSJer1Ln05UGmWDTELUzAKU46qUExZZOD1W
в базе данных?
password_hash
используется для хеширования паролей [1], чтобы они не сохранялись в виде простого текста в базе данных.
Это часть функций хэширования паролей в PHP [3]. Как вы сказали, хранится «случайный» пароль, я думаю, вы этого не ожидали, но использовали эту функцию так, как вам сказали или использовали в примере.
Таким образом, вы должны прочитать о соответствующей функции, чтобы проверить, является ли пароль, который пользователь использует для входа в систему, правильным паролем: password_verify
[2].
Небольшой пример:
$password = 'im_an_apple';
// creates a hash with the current default algorithm
$hashed = password_hash($password, PASSWORD_DEFAULT);
echo $hashed;
// e.g. $2y$10$nUT/9PN0hVuk0q3ci6aSJer1Ln05UGmWDTELUzAKU46qUExZZOD1W
// this string holds all needed informations:
// used hashing algorithm, salt, hash
// to verify this:
$verifiesPW = password_verify($password, $hashed);
$verifiesRandom = password_verify('assdfghj', $hashed);
var_dump($verifiesPW); // true
var_dump($verifiesRandom); // false
Поскольку у вас все еще могут быть пароли в виде простого текста в базе данных, ваш сценарий входа может содержать что-то вроде:
$passwordFromInput = 'im_a_banana';
$passwordFromDB = 'im_a_banana';
$isCorrectPassword = false;
$needsHash = password_get_info($passwordFromDB)['algoName'] === 'unknown'; //true
if ($needsHash) {
$isCorrectPassword = $passwordFromInput === $passwordFromDB;
} else {
$isCorrectPassword = password_verify($passwordFromInput, $passwordFromDB);
}
if ($isCorrectPassword && $needsHash) {
$passwordHash = password_hash($passwordFromInput, PASSWORD_DEFAULT);
// store $passwordHash in db
}
Используется password_get_info
[4] для проверки используемого алгоритма хеширования. Если пароль не был хеширован, он вернет unknown
в качестве алгоритма хеширования. Таким образом, пароль будет сохранен в виде хэша при входе пользователя в систему.
Рекомендации:
[1] https://security.stackexchange.com/questions/41447/why-is-password-hashing-considered-so-important
[2] http://php.net/manual/en/function.password-verify.php
[3] http://php.net/manual/en/ref.password.php