Обычно генерируются псевдослучайные числа, а не реальные случайные числа, хотя оба возможны с различной скоростью.
Существует две основные категории, в зависимости от того, будет ли последовательность использоваться в криптографических целях. Основное различие заключается в том, позволяет ли знание одного числа в последовательности предсказать следующее. ГСЧ общего назначения не беспокоятся о том, что знание алгоритма позволит наблюдателю дублировать последовательность, и они работают немного быстрее.
Типичным универсальным алгоритмом RNG является Mersenne Twister . Существует множество публичных реализаций различных алгоритмов. См. Здесь для одного.
Если МТ требует слишком много памяти, отступление на полпути - это линейный конгруэнтный генератор . (MT не был изобретен до 1997 года.) У этого генератора есть определенные проблемы, но он почти не требует памяти, почти никакого кода и очень быстр. Реализации повсюду, и это было подробно описано в Получисленные алгоритмы Кнута .
Чтобы заполнить любой ГСЧ, вам понадобится источник энтропии, см. http://en.wikipedia.org/wiki/Entropy_(computing) (Примечание: SO путается с () в этой ссылке.) Обычно это происходит из-за событий синхронизации, которые ЦП может наблюдать, например, нажатия клавиш, (я думаю, это не сработает для вас) прерываний и прибытия пакетов. Часы реального времени часто являются приемлемым источником, если они поддерживают свое собственное состояние, поскольку перезагрузки редко синхронизируются в какой-либо последовательности.