Подтвердить что ты не робот

Истинное случайное поколение в Java

Я читал Math.random() javadoc и видел, что случайный случай - только psuedorandom.

Есть ли библиотека (в частности, java), которая генерирует случайные числа в соответствии со случайными величинами, такими как температура окружающей среды, температура/напряжение процессора или что-то в этом роде?

4b9b3361

Ответ 1

Отъезд http://random.org/

RANDOM.ORG - это истинная служба случайных чисел, которая генерирует случайность через атмосферный шум.

Библиотека Java для взаимодействия с ней можно найти здесь: http://sourceforge.net/projects/trng-random-org/

Ответ 2

Ваш вопрос неоднозначен, что приводит к тому, что ответы будут повсюду.

Если вы ищете случайную реализацию, которая опирается на системный источник случайности (как я предполагаю, вы есть), то javax.crypto.SecureRandom делает это. Конфигурация по умолчанию для поставщика безопасности Sun в файле java.security имеет следующее:

#
# Select the source of seed data for SecureRandom. By default an
# attempt is made to use the entropy gathering device specified by
# the securerandom.source property. If an exception occurs when
# accessing the URL then the traditional system/thread activity
# algorithm is used.
#
# On Solaris and Linux systems, if file:/dev/urandom is specified and it
# exists, a special SecureRandom implementation is activated by default.
# This "NativePRNG" reads random bytes directly from /dev/urandom.
#
# On Windows systems, the URLs file:/dev/random and file:/dev/urandom
# enables use of the Microsoft CryptoAPI seed functionality.
#
securerandom.source=file:/dev/urandom

Если вы действительно просите об отмене этого с чем-то еще более по-настоящему случайным, это можно сделать либо путем изменения этого свойства, либо с помощью другого SecureRandom. Например, вы можете использовать провайдер JCE, поддерживаемый модулем HSM, например nCipher nShield, который имеет свой собственный PRNG или другие решения, упомянутые в потоке.

Ответ 3

Поскольку использование этих источников случайных данных потребует аппаратного доступа какого-либо типа, такая библиотека не может быть написана портативно с использованием чистой Java.

Однако вы можете попытаться написать код, зависящий от платформы, для чтения источников данных случайных данных. Для Linux (и, возможно, других Unix-подобных систем), которые могут быть /dev/random, например.

Также посмотрите на класс SecureRandom, он может уже иметь то, что вы хотите.

Ответ 4

Быстрая и грязная:

public static int generateRandom() throws IOException
{
    int num = 0;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    for (int i = 0 ; i < Integer.SIZE ; i++)
    {
        System.out
          .println("Flip a fair coin. Enter h for heads, anything else for tails.");

        if (br.readLine().charAt(0) == 'h')
        {
            num += Math.pow(2, i);
        }
    }

    return num;
}

Ответ 5

Убедитесь, что вы действительно хотите "истинные" случайные числа. Физические источники случайности должны быть измерены, а процесс измерения представляет собой некоторый уклон. Для некоторых приложений "псевдо" случайные числа на самом деле предпочтительнее "истинных" случайных чисел. Они могут обладать лучшими статистическими свойствами, и вы можете генерировать их быстрее. С другой стороны, вы можете снимать себя в ногу с генераторами псевдослучайных чисел, если вы не будете осторожны.

Ответ 7

Генератор случайных чисел истинный не существует, поскольку все они так или иначе полагаются на детерминированные процедуры для вычисления случайного числа, поэтому независимо от того, как сгенерированные числа соответствуют истинному случайному распределению, они может быть частью скрытого и очень сложного шаблона, поэтому они Pseudo-Random. Тем не менее, вы можете реализовать свой собственный генератор случайных чисел, есть несколько приятных, недорогих вычислительных методов, которые вы можете прочитать в Численные рецепты в C, Second Edition - Раздел 7. НТН

Ответ 8

Цитата из Википедии: Джон фон Нейман классно сказал: "Любой, кто использует арифметические методы для производства случайных чисел, находится в состоянии греха".

Ответ 9

Для большинства целей псевдослучайные числа более чем достаточно. Если вам просто нужно простое случайное число, т.е. в 30% случаев сделайте это, тогда метка времени как семя - это то, что вы хотите. Если это должно быть безопасное случайное число, например, перетасовка колоды, вы хотите немного подобрать семена, есть хорошие источники для создания безопасных семян.

Причиной использования семян является возможность "вспомнить" ту же последовательность случайных чисел, сгенерированных алгоритмом. Очень хороший сценарий для этого - когда вы делаете стохастическое моделирование на каком-то роде, и вы хотите повторить определенный эксперимент, тогда вы просто используете одно и то же семя.

Для лучшего PRNG, чем тот, который связан с Java, взгляните на Mersenne Twister.

Ответ 10

Просто пояснить: единственный ИСТИННЫЙ случайный генератор, который существует во Вселенной, Генератор квантовых случайных бит. Нет другого механизма, который бы заверил вас, что сгенерированные биты абсолютно случайны, потому что, даже если теперь вы не можете предсказать результат, нет гарантии, что вы не сможете этого сделать в будущем.

Quantum Random Bit Generator '(QRBG121), который является быстрым не детерминированный случайный бит (числовой) генератор, случайность опирается на внутреннюю случайность квантового физического процесса фотонного излучения в полупроводниках и последующего фотоэлектрический эффект. В этом процессе фотоны обнаруживаются случайным образом, один за другим независимо друг от друга. Информация о сроках обнаружения фотоны используются для генерации случайных двоичных разрядов - бит. Уникальный Особенностью этого метода является то, что он использует только один фотонный детектор для производят как нули, так и единицы, что приводит к очень малой высокий иммунитет к изменению компонентов и старению. Более того, обнаружение отдельных фотонов производится фотоумножителем (ФЭУ). По сравнению с твердотельными фотонными детекторами PMT превосходящий сигнал к шумовым характеристикам и значительно меньшую вероятность появление последующих импульсов, которые могут быть источником нежелательных корреляции.

Дополнительная информация здесь: http://random.irb.hr/

Ответ 11

В колледже у меня была задача реализовать случайный генератор. Я создал генератор случайных чисел следующим образом: создал окно рабочего стола и попросил пользователя щелкнуть по случайным местам в окне, после каждого щелчка я взял координаты щелкнутой точки. Это было довольно случайным, я думаю.

Ответ 12

Смотрите также этот вопрос: Альтернативные источники энтропии

Я нашел HotBits несколько лет назад - цифры генерируются из радиоактивного распада, действительно случайные числа.

Существует Java-библиотека для доступа к randomx

Есть ли ограничения на количество чисел, которые вы можете загрузить в день, но это всегда забавляло меня, чтобы использовать их как действительно, действительно случайные семена для RNG.

Ответ 13

Насколько я знаю, они работают с временем машины...!

Какие случайные числа используются для

Случайные числа использовались в течение многих тысяч лет. Будь то его переворачивание монеты или прокатка кубиков, цель состоит в том, чтобы оставить конец до случайной случайности. Генераторы случайных чисел в компьютере: похожее - theyre попытка достигнуть непредсказуемого, случайного результат.

Можно ли сделать истинные случайные числа?

Да, это!

Чтобы создать "истинное" случайное число, компьютер измеряет некоторый тип физического явления, которое происходит за пределами компьютера.

Для более изо дня в день компьютер может полагаться на атмосферные шум или просто используйте точное время нажатия клавиш на клавиатуре, как источник непредсказуемых данных или энтропия. Например, компьютер может заметить, что вы нажали клавишу ровно на 0,23423523 секунды после 2 пм.. Захватите достаточно определенного времени, связанного с этими нажатия клавиш, и у вас будет источник энтропии, который вы можете использовать для генерировать "истинное" случайное число.

Генератор случайных чисел оборудования NSA и Intels

Сделать вещи проще для разработчиков и помочь создать безопасный случайный номерах, чипы Intel включают в себя аппаратный генератор случайных чисел известный как RdRand. Этот чип использует источник энтропии на процессоре и предоставляет случайные номера программному обеспечению, когда программное обеспечение запрашивает их.

источник: HowToGeek?

На всякий случай вам может понадобиться генерировать случайные числа в Android... Я использую данные акселерометра для истинных физических случайных чисел:)