Вот что обычно происходит. Когда пользователь регистрируется, вы получаете его, чтобы предоставить имя пользователя и пароль, а также подтверждение пароля. Идея подтверждения заключается в том, что пароль обычно маскируется, и вы хотите убедиться, что они не заблокируют себя из своей учетной записи, сохранив опечатку. Затем вы хэшируете пароль, предоставленный salt, и сохраняете имя пользователя вместе с salt и hash. Когда пользователь входит в систему, вы получаете соль для этого пользователя и хешируете предоставленный пароль, а затем сравниваете его с хэшем, хранящимся в базе данных. Если хэши совпадают, пользователь успешно аутентифицирован.
Хеширование считается предпочтительнее шифрования, потому что оно одностороннее, поэтому никто не может взломать пароль из хэша, кроме как методом подбора. Соль обеспечивает дополнительную безопасность, потому что два пользователя с одинаковым паролем все равно не будут иметь одинаковый хэш. Это означает, что, если пользователь забывает свой пароль, система не может отправить ему существующий пароль, потому что она не знает, что это такое. В этом случае пользователь должен создать новый пароль. Если вы используете функцию забытого пароля на веб-сайте и т. П., И они сообщают вам, какой у вас текущий пароль, они используют более низкую защиту. Если они заставляют вас создать новый пароль, то они почти наверняка используют хеширование.
В интернете много информации о хешировании и посоле. Стоит также отметить, что в ASP.NET Identity (которую можно использовать вне приложений ASP.NET, если хотите) встроено хеширование паролей.