Как я могу создать криптографически безопасное псевдослучайное число в С#?

Есть ли быстрая реализация криптографически защищенного генератора псевдослучайных чисел (CSPRNG) для С# 3.0 (.NET Framework 3.5) для токенов аутентификации?

Ответы

Ответ 1

using System.Security.Cryptography;
...
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider())
{
    byte[] tokenData = new byte[32];
    rng.GetBytes(tokenData);

    string token = Convert.ToBase64String(tokenData);
}

Ответ 2

Это зависит от того, что вы подразумеваете под быстрым...

Существует не очень быстрый безопасный случайный генератор. Если вы хотите быстро, вы должны использовать обычный случайный класс. Если вы хотите защитить, вы должны использовать случайный генератор в пространстве имен Cryptography, но это значительно медленнее. Вы просто не можете иметь оба.