Я не думаю, что rand
- это хороший PRNG.Если я правильно помню, он отображается непосредственно в c PRNG, который во многих реализациях имеет ужасно маленькое (например, 32-битное) внутреннее состояние.
И он тоже не очень хорошо посеян.Но так как самая важная роль соли заключается в предотвращении предварительно рассчитанных радужных таблиц, что делает этот код, этого должно быть достаточно.
И я обычно делю свою соль на две части:
- A на случайную часть на пользователя, которая хранится в базе данных вместе с хешем
- A на соль приложения, которая хранится в файле конфигурации.
Таким образом, злоумышленник, которыйтолько получает доступ к базе данных, но не к файлу конфигурации (вероятный сценарий, если атака использует инъекцию SQL), тогда он все еще не может взломать пароли.