2016-09-09 4 views
2

У меня есть база данных со счетами, которые все еще используют алгоритм MD5, который является старым и небезопасным, поэтому я хотел обновить пароли с помощью функции password_hash в php.Обновление паролей md5 с помощью функции php password_hash

Я сделал логин для пользователей с паролем md5, поэтому им может быть предложено обновить поле для обновления пароля. Все это работает, и я вижу новую строку хеша в базе данных. Но когда я хочу войти с помощью своего нового пароля, это просто невозможно.

Я использую запрос обновления PDO для обновления паролей, есть ли у кого-нибудь решение или знаете, возможно ли это вообще?

Заранее благодарен, Bram.

EDIT:

Это код, который я использую для проверки паролей.

if (password_verify($password, $rowofusers['passwordhere'])) { 
     //code here 
     } 
+0

'Но когда я хочу войти в систему, используя свой новый пароль, это просто невозможно.' Так, возможно, вы покажете код, который вы используете для проверки пароля при входе в систему? –

+1

Вы должны разместить соответствующий код. – jeroen

+0

Каков тип и длина поля базы данных, в котором хранятся пароли? –

ответ

2

Как уже упоминалось, правильный способ сделать это может быть полностью прозрачным для пользователя и не требует «обновления запроса пароля».

Когда пользователь пытается выполнить вход в систему, выполните следующие шаги, чтобы соответственно изменить процесс входа в систему.

  1. Проверьте, если хэш в БД начинается с $2y$, чтобы определить, является ли пароль должен сверяться с md5 или password_verify. Если это началось с $2y$, просто используйте password_verify и проигнорируйте оставшиеся шаги (, продолжая с остальной частью вашего обычного процесса входа).
  2. Если хеш пароля в базе данных не начинается с $2y$, тогда сначала проверьте пароль с открытым текстом на его хэш-код md5.
  3. Если хэш с обычным текстовым паролем в не совпадает с md5 хэша в базе данных по-прежнему с нормальным неудавшимся процессом аутентификации и игнорировать остальные шаги здесь
  4. Если хэш равнины-текстового пароль в ли соответствует md5 хэша в ваша база данных затем берет пароль с открытым текстом и запускает его через password_hash и обновляет вашу базу данных с помощью вновь созданного хеша BCRYPT от password_hash.

Вам нужно будет сохранить этот код в процессе входа в систему до тех пор, пока все пароли в вашей базе данных не будут обновлены и не останется оставшихся md5 хэшей. Пользователь никогда не узнает, что их хеш-пароль обновлен и никогда не будет запрашиваться, чтобы ввести пароль дважды, так как это совершенно не нужно.

+0

Спасибо за ваш ответ. Я проверю, работает ли это. –

+0

Спасибо, что это сработало для меня! –

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