Если вам нужны настоящие случайные данные, то, к сожалению, вам придется их ждать. Это включает семя для SecureRandom
PRNG. Необычные математики не могут собирать настоящие случайные данные быстрее, чем SecureRandom
, хотя они могут подключаться к Интернету для загрузки начальных данных с определенного веб-сайта. Я думаю, что это вряд ли будет быстрее, чем /dev/random
, где это доступно.
Если вы хотите PRNG, сделайте что-то вроде этого:
SecureRandom.getInstance("SHA1PRNG");
Какие строки поддерживаются, зависит от SecureRandom
поставщика SPI, но вы можете перечислить их, используя Security.getProviders()
и Provider.getService()
.
Солнце любит SHA1PRNG, поэтому оно широко доступно. Это не так быстро, как PRNG, но PRNG будут просто вычислять цифры, а не блокировать физическое измерение энтропии.
Исключением является то, что если вы не позвоните setSeed()
до получения данных, то PRNG будет запущен сам при первом вызове next()
или nextBytes()
. Обычно это делается с использованием довольно небольшого количества истинных случайных данных из системы. Этот вызов может блокировать, но сделает ваш источник случайных чисел намного более безопасным, чем любой вариант «хеширования текущего времени вместе с PID, добавьте 27 и надейтесь на лучшее». Если все, что вам нужно, это случайные числа для игры, или если вы хотите, чтобы поток повторялся в будущем с использованием того же начального числа для целей тестирования, небезопасное начальное число все еще полезно.