Ответ 1
Олекси и Йоснидхин отлично справились с ответом на ваш вопрос. Я просто хотел добавить некоторые идеи, что делать на этапе перехода:
Перенесите БД в два столбца "хэш пароля", один из которых содержит существующие хеши MD5, а другой - для новых хэшей bcrypt, изначально все заполненные NULL. В следующий раз, когда пользователь войдет в систему, выполните следующие действия:
1) Проверьте, есть ли значение в столбце bcrypt. Если так, продолжайте с 3., иначе с 2.
2) Аутентифицируйте пользователя с помощью старого механизма MD5, используя значение из столбца MD5. В случае успеха дополнительно вычислите новый хэширование bcrypt и сохраните его в новом столбце. Готово.
3) Аутентифицируйте пользователя, используя значение brypt. Просто игнорируйте значение MD5.
Затем время от времени проверяйте, заполнен ли новый столбец bcrypt. Если это так, отбросьте столбец MD5 и обновите приложение, чтобы использовать только новый механизм.
Но это принятие желаемого за действительное, всегда есть некоторые пользователи, которые еще не вошли в систему. Отправляйте им сообщение, сообщающее им, что вы делаете, чтобы оно было наилучшим образом и попросите их добровольно войти в систему в ближайшее время.
Через пару недель снова проверьте статус bcrypt. Если все еще будут отсутствовать какие-либо пароли (будет:)), то вы можете сделать только reset пароли этих пользователей, создать случайный номер и сообщить об этом по почте, как и то, что вы сделали бы, если бы они забыли свои пароли.
Затем вы можете, наконец, очистить столбец MD5, отбросить соответствующий код и обновить приложение, чтобы использовать только новую аутентификацию.