MD5 обычно используется, но SHA1 / SHA256 лучше. Все еще не лучший, но лучший.
Проблема всех этих универсальных алгоритмов хеширования заключается в том, что они оптимизированы для быстрой работы. Однако, когда вы хэшируете свои пароли для хранения, быстрое - это то, что вы не хотите - если вы можете хэшировать пароль в микросекунду, то это означает, что злоумышленник может использовать миллион паролей каждую секунду если они попадут в вашу базу паролей.
Но вы хотите максимально замедлить атакующего, не так ли? Не лучше ли использовать алгоритм, который вместо хэширования пароля занимает одну десятую секунды? Десятая доля секунды все еще достаточно быстра, чтобы пользователи обычно этого не замечали, но злоумышленник, у которого есть копия вашей базы данных, сможет делать только 10 попыток в секунду - им потребуется 100 000 раз больше, чтобы найти рабочий набор. учетных данных Каждый час, который им потребуется за микросекунду за попытку, становится 11 лет с точностью до одной десятой секунды за попытку.
Итак, как вы этого достигнете? Некоторые люди притворяются, выполняя несколько раундов переваривания MD5 / SHA, но алгоритм bcrypt разработан специально для решения этой проблемы. Я не совсем понимаю математику, стоящую за этим, но мне сказали, что она основана на создании фреймов Blowfish, которые по своей природе медленны (в отличие от операций MD5, которые могут быть сильно оптимизированы на правильно настроенном оборудовании), и имеют настраиваемый параметр «стоимость», чтобы по мере продвижения закона Мура все, что вам нужно было сделать, это отрегулировать эту «стоимость», чтобы хеширование вашего пароля было таким же медленным за десять лет, как и сегодня.