Не удается заставить PHP password_hash api работать [дубликаты]

0

Так что я хэшировал строку "test"

$hash = password_hash("test", PASSWORD_DEFAULT);

Сохраненный в моем поле пароля (varchar 255)

Затем я сделал простую пробную страницу входа в систему

if (!empty($_POST['username']) && !empty($_POST['password']))
{

$username = trim($_POST['username']);
$password = trim($_POST['password']);

$stmt = $db->prepare("SELECT username, password FROM users WHERE username = ? AND password = ?");
$stmt->execute(array($username, $password));
$row = $stmt->fetch();
$hash = $row['password'];

if (password_verify($password, $hash)) {
//success
} else {
 //wrong credentials
}

Затем я ввожу свой логин и пароль test, но возвращать ложь, когда он должен вернуть истинный (но, очевидно, им неправильно, так как это не делают, им - то здесь отсутствует)

Что я здесь делаю неправильно?

Читал много об этом, но я не могу понять, почему это не вернет истину. Обратите внимание, что я новичок.

И почему соль, я думаю, первые 6 символов, которая начинается в хеше, всегда одна и та же? $2y$10. Это не может быть хорошо.

Теги:
security
hash

1 ответ

-1
Лучший ответ

Я предполагаю, что вы храните хешированный пароль в базе данных.

В предложении where вам нужно передать хешированный пароль, а не обычный текст

$stmt->execute(array($username, password_hash($password)));

То же самое в утверждении if, убедитесь, что оба хешированы

  • 0
    Я только что понял это ... Боже, я тупой
  • 0
    @ Smugglaren нет, ты не, случается с лучшими из нас!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню