Как уже отмечали другие, в целях аутентификации вам следует избегать хранения паролей с использованием обратимого шифрования, т. Е. Вы должны хранить только хэш пароля и проверять хэш пароля, предоставленного пользователем, против сохраненного вами хэша. Однако у этого подхода есть недостаток: он уязвим для радужных таблиц атак, если злоумышленник овладеет вашей базой данных хранилища паролей.
Что вам нужно сделать, это сохранить хэши предварительно выбранного (и секретного) значения соли + пароль. Т.е. объединить соль и пароль, хэшировать результат и сохранить этот хеш. При аутентификации сделайте то же самое - объедините ваши солт-значение и предоставленный пользователем пароль, хеш, затем проверьте на равенство. Это делает атаки радужного стола невозможными.
Конечно, если пользователь отправляет пароли по сети (например, если вы работаете над веб-приложением или клиент-серверным приложением), вам не следует отправлять пароль в виде открытого текста, поэтому вместо хранения хеша (соль + пароль) вы должны хранить и проверять хеш (соль + хэш (пароль)), и ваш клиент должен предварительно хешировать предоставленный пользователем пароль и отправить его по сети. Это также защищает пароль вашего пользователя, если пользователь (как и многие другие) повторно использует один и тот же пароль для нескольких целей.