Предполагая, что вы используете имя пользователя и пароль в качестве токенов аутентификации, вы можете безопасно хранить следующее, чтобы гарантировать, что данные не могут быть скомпрометированы.
- Имя пользователя (в открытом тексте)
- Соль (случайная строка)
- Соленый хеш ( sha1 (имя пользователя + соль + пароль))
Используя схему, злоумышленник не может использовать против вас радужные таблицы , и пароли не могут быть восстановлены никакими (разумными) способами.(То есть, пока ваш злоумышленник не является правительством)
Несмотря на то, что у злоумышленника есть пары соли и хеша, невозможно использовать радужные таблицы, потому что все возможные хеши должны быть вычислены в любом случае,используя соль, которую им дали, так что это совершенно новая атака грубой силы для каждого пользователя.
Даже с исходным кодом и злоумышленник не сможет получить пароли, потому что сила /безопасность заключается в алгоритме хеширования, а не в вашем коде.
Объедините это с использованием bcrypt согласно ответу Donut, и вы действительно вполне безопасны.То есть:
- Имя пользователя (в текстовом виде)
- Соль (случайная строка)
- СоленыйХеш ( bcrypt (имя пользователя + соль + пароль))