Это может зависеть от вашей операционной системы.Я мог бы предположить, что последние ядра GNU / Linux могут использовать аппаратные генераторы случайных чисел, например, для /dev/random
(поскольку страница руководства random(4)
предполагает, что он использует шум), но я могу ошибаться.
Обычная практиказаключается в использовании некоторого распространенного псевдослучайного генератора (например, стандартной функции random(3)
), но для его заполнения при запуске приложения из более случайного источника (например, чтения /dev/urandom
, использования getpid()
и чего-то изтекущее время с gettimeofday()
и т. д.).
Очень вероятно, получение очень хороших случайных чисел - это черное искусство, по крайней мере для меня.Но вышеупомянутое решение имеет, по крайней мере, то преимущество, что его нельзя легко воспроизвести из одного запуска приложения в другое.
Если ваше приложение работает долго (например, веб-служба работает в одном и том же отдельном процессе в течение многих часов), вывозможно, время от времени может заново генерироваться ваш генератор псевдослучайных чисел.Я полагаю, что для веб-сервера вы также можете использовать времена запросов (измеряя их с точностью до миллисекунды) в качестве источника случайности (для заполнения вашего PRNG).