Справочный источник .NET показывает реализацию NextBytes()
виде:
for (int i=0; i<buffer.Length; i++)
{
buffer[i]=(byte)(InternalSample()%(Byte.MaxValue+1));
}
InternalSample
предоставляет значение в [0, int.MaxValue), о чем свидетельствует его комментарий к документу и тот факт, что Next()
, который задокументирован для возврата этого диапазона, просто вызывает InternalSample
.
Меня беспокоит то, что, поскольку InternalSample
может выдавать различные значения int.MaxValue
, а это число не делится на 256 равномерно, то в результирующих байтах должно быть небольшое смещение, причем некоторые значения (в данном случае только 255) встречаются реже чем другие.
Мой вопрос:
- Является ли этот анализ правильным или метод на самом деле объективен?
- Если предвзятость существует, достаточно ли она важна для любого реального применения?
К вашему сведению, Random
не должен использоваться в криптографических целях; Я думаю об этом действительные варианты использования (например, моделирования).