Да, важно, чтобы соль была уникальной (коллизии достаточно маловероятны), но она также должна обладать достаточной энтропией (быть случайной и достаточно длинной).Идентификаторы пользователей не случайны и могут быть слишком короткими, поэтому лучше всего использовать случайно сгенерированные строки и сохранять их в своей базе данных вместе с хешем.
Предположим, что пользователь с UID 9
выбирает глупый пароль:password
.Результирующая строка, которая будет хэшироваться, может тогда быть 9password
.Вы можете себе представить, что даже в этом случае полная строка может появиться в радужных таблицах (таблицах, которые содержат много-много хэшей с их исходной строкой).
Если соль в этом случаебудет, например, OTAzMzYzODQzMjk5NTM1NDc1N
, строка, которую нужно хэшировать, будет OTAzMzYzODQzMjk5NTM1NDc1Npassword
, что вряд ли появится в радужных таблицах.Кроме того, входные строки намного длиннее, что снижает риск атак методом перебора.