Я хотел бы указать на настоящую цель использования солей. Как объясняется в другом ответе, разные соли приводят к разным хэшам для идентичных паролей, но это не главной целью.
С использованием разных солей для каждого пароля вы предотвратите строительство одного стола радуги, чтобы получить все пароли сразу.
Как вы писали, соль не секрет. Чтобы получить один пароль, злоумышленник все равно мог бы создать таблицу радуги, используя эту известную соль. Проблема в том, что ему понадобится построить второй стол радуги для второго пароля, потому что он использовал другую соль. Другими словами, первый стол радуги нельзя использовать повторно, чтобы найти другие пароли.
Построение радужного стола, чтобы получить только один пароль, не имеет смысла, проще грубой силы, пока вы не найдете совпадение, вычисление остальной части радужного стола бесполезно, так как вы не можете его повторно использовать. Вот почему мы говорим, что уникальные соли предотвращают атаки радужного стола, потому что жестокое форсирование быстрее, чем работа с радужными столами.
Вы действительно не должны использовать свои собственные соли в хэшах паролей, и вам действительно нужно использовать встроенные функции PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html) для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –
«Есть ли какая-либо причина для хранения солей»: только если вы хотите проверить пароль открытого текста на сохраненный хэш. Соль - это немного случайности, чтобы начать шифрование. Без соли данный пароль всегда генерирует один и тот же хеш. –
Да, они помогают. Да, даже если база данных нарушена. Да, даже если вы запретите IP. Да, они нужны. https://en.wikipedia.org/wiki/Salt_(cryptography) – ceejayoz