Как лучше всего генерировать случайное 128-битное число в С#?
Я пока придумал такой способ: с помощью RNGCryptoServiceProvider
сгенерировать массив байтов размером 16, потом склеить массив в одно число. Только вот вопрос: как клеить? Склеить в строку, а потом преобразовать ее в BigInteger
, или сгенерировать BigInteger
сразу из массива?
Если вам нужно именно случайное число, а не, допустим, криптографически стойкое случайное число или число с какими-то ещё дополнительными свойствами, вам вполне подойдёт очевидное:
// внимание! однопоточный код! <----------
static Random r = new Random();
static byte[] randomBytesBuf = new byte[16];
static BigInteger GenerateRandom128()
{
r.NextBytes(randomBytesBuf);
return new BigInteger(randomBytesBuf);
}
(Обратите внимание на обычную предосторожность при работе с классом Random
: если ваш код многопоточный, вам следует заводить по экземпляру Random
(а также для нашего случая randomBytesBuf
) в каждом потоке.
Криптопровайдер по сравнению с простыми методами будет медленнее улитки, и без особой на то необходимости я бы не рекомендовал его использовать.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте! Есть некоторый чат-бот(написан на c# с использованиемnet core и Entity Framework Core
Доброго времени суток, нужно получить капчу с сайта, капча имеет такой урл :