Невозможно «разархивировать» пароли (по крайней мере, не общим, эффективным и надежным способом - вы можете угадать некоторые пароли, это то, что делают злоумышленники, и вы хотите перейти с MD5именно потому, что злоумышленники могут иметь некоторый успех в этом).Таким образом, миграция будет распространяться с течением времени: некоторые пароли будут хэшироваться с помощью MD5, другие с помощью SHA-256.Когда необходимо подтвердить пароль:
- Если SHA-256 этого пароля известен, используется SHA-256.Этот пароль уже перенесен.
- В противном случае MD5 используется для проверки пароля.Если он совпадает, то пароль хороший, и , так как пароль в то время был известен приложению, приложение также хэширует пароль с SHA-256 и заменяет MD5хеш с хешем SHA-256 в базе данных.
Таким образом, пароли переносятся динамически;чтобы полностью избавиться от MD5, вам придется долго ждать и / или уничтожать учетные записи, к которым давно не обращались.Необходимо иметь возможность отличить хеш MD5 от хеша SHA-256, что легко, поскольку они имеют разные размеры (16 байт для MD5, 32 байта для SHA-256).Вы также можете добавить флаг или любой другой подобный трюк.
Обратите внимание , что хеширование паролей с помощью одного простого приложения хэш-функции - довольно паршивый способ сделать это с точки зрения безопасности.и замена MD5 на SHA-256 не улучшит ситуацию.Вы хэшируете пароли, чтобы злоумышленник, получивший доступ для чтения к базе данных, не узнал сами пароли.Чтобы действительно не позволил злоумышленнику угадать пароли, вам также нужны "соли" (случайные данные для каждого пароля, хранящиеся вместе с хешированным паролем) и подходящая медленная хеш-функция (т. Е. Тысячи(возможно, миллионы вызовов вложенных хеш-функций).См. этот ответ для деталей.Краткий ответ: так как вы предполагаете миграцию, сделайте умную вещь и перейдите на bcrypt , а не SHA-256 (см. , который отвечает на security.stackexchange).