web-dev-qa-db-ja.com

C#で暗号的に安全な擬似乱数を生成するにはどうすればよいですか?

C#3.0(.NET Framework 3.5)、認証トークン用の 暗号的に安全な擬似乱数ジェネレーター (CSPRNG)の高速実装はありますか?

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

    string token = Convert.ToBase64String(tokenData);
}
103
John Gietzen
3
stuartd

それはあなたが速いという意味に依存します...

本当に高速で安全なランダムジェネレータはありません。高速にしたい場合は、通常のRandomクラスを使用する必要があります。安全にしたい場合は、Cryptography名前空間でランダムジェネレーターを使用する必要がありますが、それはかなり低速です。単に両方を持つことはできません。

3
Guffa