Как лучше всего генерировать случайное 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) в каждом потоке.
Криптопровайдер по сравнению с простыми методами будет медленнее улитки, и без особой на то необходимости я бы не рекомендовал его использовать.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости