Генерация случайного 128-битного числа

281
03 июля 2017, 16:06

Как лучше всего генерировать случайное 128-битное число в С#?
Я пока придумал такой способ: с помощью RNGCryptoServiceProvider сгенерировать массив байтов размером 16, потом склеить массив в одно число. Только вот вопрос: как клеить? Склеить в строку, а потом преобразовать ее в BigInteger, или сгенерировать BigInteger сразу из массива?

Answer 1

Если вам нужно именно случайное число, а не, допустим, криптографически стойкое случайное число или число с какими-то ещё дополнительными свойствами, вам вполне подойдёт очевидное:

// внимание! однопоточный код! <----------
static Random r = new Random();
static byte[] randomBytesBuf = new byte[16];
static BigInteger GenerateRandom128()
{
    r.NextBytes(randomBytesBuf);
    return new BigInteger(randomBytesBuf);
}

(Обратите внимание на обычную предосторожность при работе с классом Random: если ваш код многопоточный, вам следует заводить по экземпляру Random (а также для нашего случая randomBytesBuf) в каждом потоке.

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

READ ALSO
Удаление повторяющихся строк

Удаление повторяющихся строк

Есть тхт в ней есть много строк

220
MS SQL SERVER (Ubuntu 16.04.2) Требования

MS SQL SERVER (Ubuntu 16.04.2) Требования

Здравствуйте! Есть некоторый чат-бот(написан на c# с использованиемnet core и Entity Framework Core

195
Как получить капчу с сайта. c#

Как получить капчу с сайта. c#

Доброго времени суток, нужно получить капчу с сайта, капча имеет такой урл :

329