Вам не нужна отдельная соль для каждого пароля.
Цель посола - противостоять радужным таблицам - вы конвертируете пароль кандидата в новую строку, в которой есть ваша соль; так как соль - это какая-то личная строка, которой владеют только вы, знание хеша соленого пароля не поможет злоумышленнику, у которого есть пробная таблица.
Умный злоумышленник может попытаться создать собственную радужную таблицу только для вашего сервиса, создав учетную запись и изменив свой пароль, чтобы увидеть, что в результате получается хеш. Если соль одинакова для каждого пользователя, то, когда он видит, что хеш «xyz123» соответствует «яблоку», и замечает, что хеш другого пользователя также является «xyz123», он может заключить, что пароль этого пользователя - «яблоко». Это точка, где большинство людей решают хранить уникальную соль для каждого пользователя.
Однако, это не нужно . У вас уже есть уникальная строка для каждого пользователя - имя пользователя. Это не секрет, поэтому это не хорошая соль; однако объединение имени пользователя и глобальной секретной соли является как секретным, так и уникальным. Если вы храните хеш (имя пользователя + соль + пароль), вам нужно знать только одно глобальное значение соли во время поиска.
(это правда, что это представляет больший риск, если кто-то утечки единой глобальной соли. Но это метод, который стоит рассмотреть).