Как я могу прочитать зашифрованный пароль из базы данных, чтобы предоставить пользователям доступ?

Я не могу сопоставить пароль, возвращенный функцией crypt (), чтобы разрешить пользователям доступ.

Моя функция cryptPassword:

function cryptPass($input, $rounds = 9) {
$salt = '';
$saltChars = array_merge(range('A', 'Z'), range('a', 'z'), range(0, 9));
for ($i = 0; $i < 22; $i++) {
$salt .= $saltChars[array_rand($saltChars)];
}
return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt);
}

Моя регистрационная форма:

if($_POST['register']) {
if($_POST['username'] && $_POST['email'] && $_POST['password']) {
$username = mysqli_real_escape_string($dbCon, $_POST['username']);
$email = mysqli_real_escape_string($dbCon, $_POST['email']);
$password = mysqli_real_escape_string($dbCon, cryptPass($_POST['password']));
// insert into databse...
}
}

Моя форма входа:

if($_POST['username'] && $_POST['password']) {
$username = mysqli_real_escape_string($dbCon, $_POST['username']);
$inputPassword = mysqli_real_escape_string($dbCon, $_POST['password']);
$password = "SELECT * FROM users WHERE password = '$inputPassword'";
$hashedPass = cryptPass($password);
if(crypt($inputPassword, $hashedPass) == $hashedPass) {
die("<br>Password is a match. Log in");
} else {
echo "<br>Passwords do not match!!! Do NOT log user in <br>";
}
}

Я проверил, чтобы увидеть, почему я не могу войти в систему пользователей, вот результаты:

  • имя пользователя: 2, пароль: 2 — вход в систему -> результаты ->

Пароли не совпадают!!! НЕ входить в систему пользователя:

$inputPassword = 2
$query password = SELECT * FROM users WHERE password = '2'
$hashedPass = $2y$09$ICAfpjSJyXEp93JsUbhyieaeMX7KNC6vQSayc0nT6QLHWrMjdYQhi
crypt($inputPassword, $hashedPass) = $2y$09$ICAfpjSJyXEp93JsUbhyie9dqXeWEVqCYGR3faLHveUp1LsJegxpu

Как видите, первая часть идентична ($ 2y $ 09 $ ICAfpjSJyXEp93JsUbhyie), но другая часть постоянно меняется. Я полагаю, это связано с солью, которую я добавляю? Если да, как я могу сопоставить пароли, чтобы разрешить доступ для моих пользователей?

1

Решение

Проверять, выписываться hash_equals. Также, Вот это статья о реализации.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]