Лучший метод генерации числа с 256 случайными битами? - PullRequest
2 голосов
/ 19 февраля 2009

Каков наилучший метод генерации числа с 256 случайными битами?

Работает ли объединение случайных байтов?


byte[] data = new byte[32];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetNonZeroBytes(data); // should include zero bytes?
string number = BitConverter.ToString(data, 0).Replace("-", "");

Более того, было бы целесообразно отсортировать колоду карт, используя не дубликаты этих чисел?

Ответы [ 4 ]

5 голосов
/ 19 февраля 2009

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

Если вы используете эти случайные числа для криптографических целей, вам следует взглянуть на Blum Blum Shub . В противном случае посмотрите на Mersenne Twister .

Чтобы перетасовать конечный набор, посмотрите на Перестановку Фишера-Йейтса .

3 голосов
/ 19 февраля 2009

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

0 голосов
/ 19 февраля 2009

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

0 голосов
/ 19 февраля 2009

да, конкатенация случайных байтов будет работать.

РЕДАКТИРОВАТЬ: Не уверен, почему вам нужно 256 бит, чтобы перетасовать колоду карт, вы можете расширить эту часть дальше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...