2014-11-08 2 views
0

Так что я хэшируюсь строка «тест»не удается получить PHP password_hash апите работать

$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. Это не может быть хорошо.

+0

Ваш буквальный ввода '$ пароль 'не будет совпадать в запросе SELECT, если этот столбец содержит хэш. – mario

ответ

-1

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

В ИНЕКЕ вам нужно передать его в зашифрованный пароль, а не простой текст

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

То же самое в если заявление, убедитесь, что оба перемешаны

+0

Я только что понял это .... бог im stupid – Smugglaren

+0

@Smugglaren нет, вы не, случается с лучшими из нас! –

+1

Это неправильный подход. Вы получите другой соленый хеш с каждым вызовом 'password_hash()'. Он никогда не будет соответствовать содержимому базы данных. – mario

Смежные вопросы