Перенос старых паролей md5 на пароли bcrypt

Я перерабатываю сайт в Rails, используя Devise для аутентификации. Предыдущий веб-сайт работает с базой данных пользователей с паролями md5, и поэтому я хочу перенести эти пароли на шифрование, использующее Devise. Как его решить?

Ответы

Ответ 1

Олекси и Йоснидхин отлично справились с ответом на ваш вопрос. Я просто хотел добавить некоторые идеи, что делать на этапе перехода:

Перенесите БД в два столбца "хэш пароля", один из которых содержит существующие хеши MD5, а другой - для новых хэшей bcrypt, изначально все заполненные NULL. В следующий раз, когда пользователь войдет в систему, выполните следующие действия:

1) Проверьте, есть ли значение в столбце bcrypt. Если так, продолжайте с 3., иначе с 2.

2) Аутентифицируйте пользователя с помощью старого механизма MD5, используя значение из столбца MD5. В случае успеха дополнительно вычислите новый хэширование bcrypt и сохраните его в новом столбце. Готово.

3) Аутентифицируйте пользователя, используя значение brypt. Просто игнорируйте значение MD5.

Затем время от времени проверяйте, заполнен ли новый столбец bcrypt. Если это так, отбросьте столбец MD5 и обновите приложение, чтобы использовать только новый механизм.

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

Через пару недель снова проверьте статус bcrypt. Если все еще будут отсутствовать какие-либо пароли (будет:)), то вы можете сделать только reset пароли этих пользователей, создать случайный номер и сообщить об этом по почте, как и то, что вы сделали бы, если бы они забыли свои пароли.

Затем вы можете, наконец, очистить столбец MD5, отбросить соответствующий код и обновить приложение, чтобы использовать только новую аутентификацию.

Ответ 2

У меня есть альтернативное решение:

  • Добавить столбец bcrypt.
  • Заполните столбец bcrypt, выполнив хеш MD5 с помощью алгоритма bcrypt.
  • Измените логин на всегда, используя столбец bcrypt и функцию хеширования plain text->md5->bcrypt.

Таким образом, все пароли могут быть перенесены сразу, а хеши MD5 будут отброшены навсегда. Учитывая это, я не могу выбрать недостатки этой идеи. Любые берущие? Мне что-то не хватает?

Ответ 3

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

Ответ 4

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