Прежде всего, разница между шифрованием и хэшированием на высоком уровне заключается в том, что зашифрованные данные могут быть расшифрованы с помощью правильного ключа, тогда как хешированные данные не могут быть извлечены, кроме как с помощью методов грубой силы, таких как прегенерация или радужные таблицы.
Хешированные пароли проверяются путем хеширования введенных пользователем данных при каждом входе в систему таким же образом, как вы это делаете при создании учетной записи, и сравнения результатов хеширования.Для любого заданного ввода результат хеширования должен быть одинаковым.
Обязательный rant:
Есть хороший аргумент в пользу того, что пароли должны всегда хешируется с использованием криптографически стойкого алгоритма.Вы можете услышать оправдание, что «мое приложение / веб-страница / и т. Д. Не так уж важно, там нет секретной информации», или «я просто учусь, так что это не важно», но факт в том, что если яможет взломать безопасность одного веб-сайта, или вы оставляете свой компьютер в системе, а я краду ваш файл паролей из вашего «образовательного» приложения, я могу взять все адреса электронной почты пользователя и фактически гарантировать, что по крайней мере некоторые из них будут использоватьтот же пароль для этой учетной записи Gmail или Yahoo.Затем я могу отправить запросы на сброс практически для любого сайта, на который их электронная почта сообщает, что у них есть учетная запись, и получить доступ к ним. Поэтому очень важно, чтобы независимо от того, какое программное обеспечение вы пишете, если оно хранит пароли, вы должны делать ответственные действия и правильно их халить + хэшировать .