2010-10-19 3 views
4

Возможные Дубликаты:
Understanding “randomness”
Fastest implementation of a true random number generator in C#Как получить действительно случайное число?

Здравствуйте. Функция:

Random rand = new Random(); 
rand.Next() 

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

Что вы думаете об использовании короткого образца из микрофона или времени между изменением положения мыши?

+0

Был только вчера говорил:. http://stackoverflow.com/questions/3956478/understanding-randomness – 2010-10-19 12:41:00

+2

Google для космического фонового излучения, то Гра b образец. – leppie

+0

На каком языке это? (извинения за незнание, предполагая C#?) – richsage

ответ

24

Поставьте кошку в коробке с бутылкой яда, который будет выпущен, когда один атом радиоактивного материала затухает. Вернитесь через час и откройте коробку. Если кошка мертва, используйте 0 как случайный бит в вашей программе. Если он жив, используйте 1.

Повторите с таким количеством кошек и коробок, сколько необходимо.

+0

+1 за жестокость к виртуальным кошкам! –

+0

Побеждает Шрёдингер! –

+0

hahahah .. ты заставил меня смеяться много! пальцы вверх! – Greg

5

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

(или лучше использовать оставшуюся часть времени в микросекундах мод 256 микросекунд для устранения любого человека периодичности. Таким образом, каждое нажатие дает 1 случайных байты, используйте соответствующее количество ударов семена вашего генератора)

+0

@ Аnders: Пожалуйста, не используйте tinyurl в SO. – MAK

+0

@MAK, ОК. http://books.google.com/books?id=-kcKpqzbBR0C&pg=PA254&lpg=PA254&dq=GUI+Bloopers+%2B+Random+number&source=bl&ots=rPcMkV2ZZR&sig=nVfoIfb4AqVw2xwpQdmcCo3q9zA&hl=sv&ei=W5S9TO2eGcbGswbsk4DEDQ&sa=X&oi=book_result&ct=result&resnum=3&ved=0CCQQ6AEwAg # v = onepage & q & f = false, не привлекать пользователя к этому процессу, это плохая практика. – Anders

+0

Я покачаю мышью, чтобы сгенерировать ключ RSA, и это меня действительно не беспокоит. Я думаю, это зависит от того, сколько чисел и как часто. Люди на самом деле действительно хороши в создании случайности, потому что мы ничего не можем точно повторить. Вот почему люди по-прежнему полируют зеркала телескопов вручную. В любом случае, учитывая, что OP не предоставляет никакой информации о своей системе, я не уверен, где еще вы получаете случайность, в общем. – Marc

5

Большинство программируемых случайных функций основаны на математических алгоритмах. Существуют генераторы случайных чисел, которые используют волновые шумы в воздухе (из космического излучения), но они основаны на оборудовании.

5

Для этого вам понадобится hardware random number generater.

В качестве замены для этого достаточно измерить время «аппаратных событий», таких как пользовательский ввод или сетевая активность.

В Linux устройство /dev/random создает байты на основе этого метода.

4

Я бы порекомендовал вам:

Истинных Генераторы случайных чисел (TRNGs)

http://www.random.org/randomness/

Это будет указывать вам в правильном направлении!

4

Очень трудно получить действительно случайных чисел. В конце концов, PRNG, в некотором смысле, предсказуемы.Но гораздо сложнее правильно построить генератор случайных чисел на основе физического источника; большинство случайных источников не производят реальные случайные бит все, что быстро, и трудно сказать, сделали ли вы плохую ошибку. Хороший PRNG лучше практически для всех целей и целей.

(Используйте только высококачественный PRNG, если он вам нужен, поскольку они намного медленнее, и убедитесь, что вы используете подходящий вид, если вы это сделаете: PRNG, предназначенный для криптографии, не такой, как один для Монте Карло-симуляция - криптографические PRNG убеждаются, что каждый бит трудно догадаться, в то время как MCSim PRNG убеждаются, что спектральные свойства хороши - и большинство других применений для PRNG просто хотят, чтобы они не были грубыми и бычья, стандартная библиотека, как правило, хороша достаточно есть)

3
+0

Разве SO не должен предоставлять программные решения? (признавая, что здесь нет хорошего чисто программного решения) – Marc

+0

извините, но я настолько очарован этим ключом, что мне пришлось делиться ... –

Смежные вопросы