Это зависит от того, от какой атаки вы пытаетесь защищаться. Если при атаке кто-то просматривает базу данных, вы можете использовать симметричный метод шифрования (например, AES) с ключом, определенным вне базы данных. Использование этого метода требует, чтобы процедура аутентификации знала ключ шифрования, и вы обновляете все строки в базе данных, шифруя хешированный пароль с помощью ключа шифрования.
Если вышеупомянутое не вариант, у вас есть проблема. ;)
Проблема в том, что сейчас вы не знаете, какой на самом деле пароль любого пользователя. Все, что у вас есть, это хешированная версия. Ваша процедура проверки входа в систему состоит в том, чтобы взять введенные пользователем данные, хэшировать их и сравнить вычисленный хэш с сохраненным хешем.
Вы можете сохранить хэш old и создать новое поле для хранения нового алгоритма. Затем, когда пользователи войдут в систему, выполните обновленный хеш-код salted и удалите хэш old . Это будет работать так, как вы ожидаете, но если человек никогда не войдет в систему (или не изменит свой пароль), он никогда не обновится до соленой версии хэша.
Мое личное мнение - использовать опцию шифрования AES, поскольку она предотвращает случайный просмотр хэшированных паролей и охватывает все пароли в базе данных.