Перенос паролей SHA1, сгенерированных в PHP, в Bcrypt в JavaScript - PullRequest
0 голосов
/ 15 марта 2020

Я перехожу на сторону шифрования вещей, более или менее холодных, и, потратив на это несколько дней, мне нужна помощь.

План состоит в том, чтобы отправить пользователей по почте, попросить их войти, проверьте их пароль по SHA1, а затем зашифруйте предоставленный пароль в Bcrypt, заменив существующий пароль.

У меня есть таблица «users», которая содержит пароли, сгенерированные комбинацией IonAuth и FlexiAuth в PHP и соответствующее значение соли для каждого пароля.

В соответствии с файлом конфигурации для IonAuth пароли должны быть SHA1.

Я запустил пароль, зашифрованный SHA1, известный мне через существующий метод Bcrypt, и он также выдал false как для пароля, так и для пароля с солью, поэтому я по крайней мере исключил Bcrypt в качестве возможного алгоритма.

Итак, для целей тестирования я использую известное и действительное имя пользователя и пароль.

Я переписал приложение в Vue, Node, Express и и так далее, и попытался:

let password = passwordHash.verify(providedPassword + user.salt, user.password)
console.log("Users:password", password)

… но это неверно для пароля и пароля с солью.

Я использую старинный парольHa sh модуль для узла, так как я не смог найти ничего другого, и я подозреваю, что это не сработает, поскольку он добавляет строки ha sh к "sha1"

Для справки, хэшированный пароль Строки в таблице «users» начинаются с: «$ 2a $ 08 $…», а строки, сгенерированные Bcrypt в Node, начинаются с: «$ 2a $ 10 $…»

Есть идеи?

1 Ответ

1 голос
/ 16 марта 2020

Я не знаю, о чем вы спрашиваете:

В соответствии с файлом конфигурации для IonAuth пароли должны быть SHA1.

ОК. Это может быть все, что они решат; pig-latin, если они хотят.

Я запустил пароль, зашифрованный SHA1, известный мне по существующему методу Bcrypt, и он также выдал false как для пароля, так и для пароля с солью, поэтому По крайней мере, я исключил Bcrypt как возможный алгоритм.

SHA-1 - это не шифрование; это хэширование Вы запускали хеш-пароль SHA-1 через bcrypt? Или вы запускали пароль через bcrypt?

и он также имеет значение false для пароля и пароля с солью

Что вы имеете в виду соль? bcrypt поставляет соль. Вы не поставляете соль. Итак, вы удалили bcrypt.

Но в чем проблема? Вы не можете войти? Ваша базовая структура не может проверить свои собственные учетные данные? Вы получаете ошибку аутентификации?

Короткая версия: у меня есть нет идеи о том, что вы делаете.

Но

  • независимо от что говорит этот Ion Framework
  • независимо от SHA-1
  • независимо от соли или нет (?!) соли
  • независимо от передачи пароля по сравнению с ша-1 га sh пароля для bcrypt:

Похоже, вы просите идентифицировать хешированные пароли, сгенерированные кем-то.

Оба:

  • $2a$08$…
  • $2a$10$…

абсолютно точно bcrypt.

Первый - bcrypt с коэффициентом стоимости 8 (т.е. 2 8 раундов).
Второй - bcrypt с фактором стоимости 10 (т.е. 2 10 раундов).

Что бы это ни было, он должен использовать коэффициент стоимости, равный 12, пожалуйста (для генерации ~ 250 мс).

Итак, я бы начал с того, что убрал бы всю хвалу "услужливо" , предоставленную этим фреймом k - и вызовите bcrypt.

Я больше не имею дело с javascript, и при этом я не знаю, что это за библиотека bcrypt. Но каждая библиотека bcrypt, достойная своей соли, имеет такую ​​функцию:

String hash = bcrypt.hashPassword("hunter2", 12);

и

Boolean passwordMatch = bcrypt.verifyPassword("hunter2", hash);

Тот факт, что кто-то пытается добавить соль к паролю:

providedPassword + user.salt

абсолютно неверно.

Независимо от

Если ничего другого: те сохраненные строки, которые вы показали , являются bcrypt.

  • $1$ : Крипта на основе MD5 ('md5crypt')
  • $2$: крипта на основе Blowfi sh ('bcrypt')
  • $2a$: bcrypt; обновлен до документа UTF8 и нулевого терминатора
  • $2b$: bcrypt; сгенерированные OpenBSD без ошибок в их более ранней версии
  • $2x$: хэши bcrypt, сгенерированные одной ошибочной php реализацией
  • $2y$: хэши bcrypt, сгенерированные одной фиксированной реализацией php
  • $sha1$: крипта на основе SHA-1 ('sha1crypt')
  • $5$: крипта на основе SHA-256 ('sha256crypt')
  • $6$: Скрипт на основе SHA-512 ('sha512crypt')

Вы говорите, что удалили bcrypt.

Я гарантирую, что вы bcrypt.

I Предлагаем вам воспользоваться этой модной платформой и использовать bcrypt напрямую. Убедившись, что вы можете правильно:

  • га sh
  • хранить
  • проверить

пароли, используя bcrypt, тогда вы можете попробовать отладить эту недокументированную библиотеку Ion.

...