Итак, мы заключили соглашение о хранении паролей, которое действительно является самой важной частью всего этого:
Обычный текст - это большое нет-нет, потому что, если ваш сервер когда-либо будет взломан, злоумышленник может выпустить список всех имен пользователей и паролей вашего клиента, что плохо по разным причинам.
Зашифрованные пароли плохие, потому что, если ваш сервер когда-либо будет взломан, злоумышленник может просто расшифровать пароли так же, как и ваша программа, и теперь у вас та же проблема, что и у открытого текста.
Криптографические дайджесты, такие как MD5, SHA-1 и даже SHA-512, намного лучше, потому что вы сохраняете и сравниваете только хэшированные пароли, но они все еще плохие, потому что они были разработаны для очень быстрого хеширования данных для Цели целостности данных и подписи. Это делает на удивление легко взломать пароли с помощью атак методом "грубой силы" на современном оборудовании - даже с солью! (См. Статьи об использовании графических процессоров для этой цели!)
Так, где это оставляет нас? Оказывается, дайджесты - это хороший способ, но вы хотите, чтобы они были сложными в вычислительном отношении, чтобы затруднять атаки методом грубой силы. Есть несколько доступных вариантов, но я принял хеш Brcypt в своей профессиональной деятельности.
В качестве дополнительного примечания, пароли должны всегда храниться с солью, чтобы избежать атак радужного стола. Одним из преимуществ Bcrypt является то, что в него встроены процедуры посола, так что вам не нужно об этом беспокоиться.