Я читал на SO (и на других веб-сайтах, найденных в Google после того, как я попытался немного изучить его), что правильный безопасный способ хранения паролей в базе данных - это хранить хешированное + соленое значение пароля. Вдобавок ко всему, соль должна быть разной для каждого пользователя, чтобы хакеры не могли навредить, даже если у них есть зашифрованные значения.
Я не совсем понимаю, что такое соление. Насколько я понимаю, вы хешируете пароль, затем используете другое значение, которое вы хешируете (соль), и объединяете эти два вместе, чтобы алгоритм получения исходного пароля был разным для каждого пользователя.
Итак, в основном, что мне нужно сделать, это хешировать пароль, затем использовать другой хеш для другого значения для каждого пользователя (например, имя пользователя или адрес электронной почты), а затем я могу выполнить простую математическую операцию с этими двумя значениями. чтобы получить зашифрованный пароль.
Это правильно или я просто ничего не понял про хеширование паролей + засаливание?
Простое объяснение или пример могут оказаться полезными, поскольку сайты, которые я нашел, не совсем ясно объясняют, что такое соление пароля.
Изменить: Прочитав оставленные комментарии и ответы, я понял, что не совсем понял, что такое соль, потому что мне не хватает некоторых ключевых понятий и я делал ложное предположение.
Что я хотел бы знать: как вы постоянно получаете одну и ту же соль, если она генерируется случайным образом? Если соль хранится в базе данных, как упоминали некоторые люди, тогда я вижу, как вы продолжаете получать ту же соль, но это вызывает другой вопрос: как это сделать пароли более безопасными, если кто-либо, имеющий доступ к базе данных, имеет доступ к соль? Разве они не могли бы просто добавить (известную) соль ко всем паролям, которые они пробуют, и результат был бы таким же (за исключением небольшой потери времени), чем при его отсутствии?