Измените password_hash на bcrypt

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

Я считаю, что они зашифровали пароли с помощью

password_hash(' ', PASSWORD_DEFAULT) method

но я думаю, что Laravel использует

Bcrypt()

Поэтому я не могу войти в систему, используя эти учетные данные. Есть ли способ изменить шифрование?

Я не хочу просить пользователей сменить пароль или что-то еще

Вы ведь прочитали php.net/manual/en/function.password-hash.php, верно?

Jay Blanchard 26.10.2018 23:24

Кстати, он хеширован, а не зашифрован. Всего два разных зверя ;-)

Funk Forty Niner 26.10.2018 23:28

Поможет ли это изменить старые хешированные пароли на bcrypt? Я не думал, что это сработает. Только для создания новых.

Robert Serrano 26.10.2018 23:32

Вы можете создавать только новые, хеш невозможно взломать. Чтобы преобразовать в новые, нужно немного поработать.

Jay Blanchard 26.10.2018 23:34

В том-то и дело. Я хотел бы преобразовать старые хешированные пароли в пароли bcrypt, не прося пользователя изменить его самостоятельно.

Robert Serrano 26.10.2018 23:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
275
2

Ответы 2

Чтение метода очень хорошее руководство показываетPASSWORD_BCRYPT:

password_hash("thepassword", PASSWORD_BCRYPT);

Если у них есть существующий пароль, вы можете использовать password_verify() для подтверждения пароля, независимо от того, как он был хеширован.


Вы можете преобразовать пользователя в новые хэши паролей, но только когда они войдут в систему. Вам нужно будет добавить еще один столбец для хранения нового пароля, а затем, когда они войдут в систему, проверьте существующий пароль (проверьте, если возможно) и пустой в новом столбце. Если новый столбец не пуст, сравните с столбцом password_verify(). Если он пуст, хешируйте новый пароль указанным способом.

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

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

Robert Serrano 26.10.2018 23:34

Верно. Если вы хотите изменить метод и преобразовать старые пароли, дорога намного длиннее.

Jay Blanchard 26.10.2018 23:36

Я отредактировал, чтобы отразить метод создания новых хэшей.

Jay Blanchard 26.10.2018 23:40

Laravel использует хэши bcrypt, те же хэши, которые использует password_hash с алгоритмами PASSWORD_BCRYPT или PASSWORD_DEFAULT.

Следовательно, хеши уже совместимы с Laravel. Это довольно легко проверить с помощью tinker:

> $hash = password_hash('test', PASSWORD_DEFAULT);
"$2y$10$OpnZSN0EbAzMCvywTAWyWOqOme6/3N/xe.nrpcUO6mhLumMxL6DYm"
> Hash::check('test', $hash);
true

Laravel также позволяет вам легко подключить вашу собственную реализацию интерфейса Hasher путем привязки к контейнеру ioc.

Другие вопросы по теме