2015-12-25 3 views
-2

Я пытаюсь создать форму с вводом пароля. Я пытаюсь хэш-пароль через php password_hash и сохранить его в БД. И когда пользователи войдут в систему, я сделаю хэш-вход и проверю, что то же самое, что и в БД.php password_hash изменение при обновлении

Проблема в том, что когда я использую password_hash, она дает мне случайный вывод каждый раз, когда я обновляюсь. Вход все тот же. Это делает невозможным вход пользователя в систему, потому что выходная информация никогда не будет соответствовать тем, что находится в БД.

Я проверяю это так:

$pw = "hello"; 
echo password_hash ($pw, PASSWORD_DEFAULT); 

the first echo = $2y$10$7GwPLFNIhybl6tcyuYsH..Dtgfn2hF7RUDwZ99o7BkL6eza4Dsope; 
echo again = $2y$10$7tvaZHupw8Ik8Id/ImHCHekpp/Deg4E.XkG82zaVYx262Exv3zMde; 

я делаю неправильно ЗПТ? plz help

+2

вы используете 'password_verify' для соответствия ... – Andrew

+1

и поэтому должны. RTM, если вы хотите сохранить постоянный хеш. http://php.net/manual/en/function.password-hash.php –

+0

Возможный дубликат [Использование PHP 5.5's \ 'password \ _hash() \' и проверка функции, я делаю это правильно?] (http://stackoverflow.com/questions/14992367/using-php-5-5s-password-hash-and-verify-function-am-i-doing-it-right) – JamesQMurphy

ответ

2

Да. вы делаете что-то неправильно.

hash- Ожидается изменение при каждом запросе. Это цель.

Что нужно сделать, это проверить пароль на этот хеш.

if(password_verify($password, $hash)){ 
    //correct 
} 

Не пытайтесь сравнивать хэш на каждой загрузке страницы.

+0

Как я могу сравнить пароль с хэшем если хэш меняется каждый раз, когда я загружаю страницу? – hatemjapo

+0

@hatemjapo 'hash' должен храниться где-то« безопасно ». Например, база данных или файл. В целях тестирования вы можете сохранить его в '$ _SESSION ['hash'] = $ hash', а затем проверить его на загрузке страницы' $ hash = isset ($ _ SESSION ['hash'])? $ _SESSION ['hash']: false; 'Тогда вы можете сделать' if ($ hash) {if ($ password_verify ($ password, $ hash) {'... etc – Ohgodwhy

+0

Я пробовал это. Я сделал форму, где я должен был ввести pw.Я сохранил его в БД.Теперь я попытался сопоставить вход с хешем в базе данных, он выглядит так: '$ sql =" SELECT * от пользователя WHERE email = '$ email' «; $ Рез = mysqli_query ($ ссылка, $ SQL); $ USER = mysqli_fetch_assoc ($ Рез); $ хеш = $ пользователю [ 'пароль']; если (password_verify ($ пароль, $ хэш)) echo 'logged in'; else echo 'not found'; ' – hatemjapo

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