Перенос хэшей паролей bcrypt из приложения Laravel в приложение Elixir с помощью Comeonin

Я нахожусь в процессе перенастройки приложения Laravel 5 на Elixir Phoenix и хочу оценить возможность переноса учетных записей пользователей с их паролями. Приложение laravel использует хеширование паролей Bcrypt по умолчанию, и пример хеша выглядит так:

Hash::make("secret");
> $2y$10$gLbeMfXDRnQc9VHxuVAhke3yd4L69LQBeTqBOjw6TqQNca1nrW5E2

Я использую библиотеку Заходи для приложения Phoenix, которое создает такой хеш:

iex(2)> Comeonin.Bcrypt.hashpwsalt("secret")
"$2b$12$yecF6WXv0hIlyTxe5bLz..ghASJRFafObDrPUVEj3UarDflvfflq6"

Когда я пытаюсь проверить хэш, сгенерированный Laravel с помощью Comeonin, он терпит неудачу:

iex(2)> Comeonin.Bcrypt.checkpw("secret","$2y$10$gLbeMfXDRnQc9VHxuVAhke3yd4L69LQBeTqBOjw6TqQNca1nrW5E2")
false

Почему это? Существуют ли разные реализации Bcrypt? Я вижу, что два хэша используют разное количество раундов и вариантов (2b против 2y), но я предполагаю, что библиотека может прочитать это из префиксов в хеше.

Можно ли будет перенести эти хэши, не заставляя пользователей сбрасывать свои пароли?

См. Comeonin Bcrypt не поддерживает префикс 2y? для обхода (напрямую не поддерживаемого) формата 2y.

Nic Nilov 08.08.2018 00:15

Хранит ли bcrypt в ключе своего эмитента? потому что jwt делает, и тогда он никогда не будет соответствовать

Gabriel Rufino 08.08.2018 02:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
199
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминал @NicNilov, Comeonin не поддерживает префикс 2y (который был создан для обхода ошибки в реализации php). Бывает, что 2y совместим с вариантом 2b, поэтому простая замена префикса позволит проверить хэши.

Пример:

Comeonin.Bcrypt.checkpw(password, fix_prefix(password_hash))

defp fix_prefix("$2y" <> rest), do: "$2b" <> rest
defp fix_prefix(password_hash), do: password_hash

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