How can I generate a cryptographically secure pseudorandom number in C#?
Is there any fast implementation of cryptographically secure pseudorandom n开发者_如何学Goumber generator (CSPRNG) for C# 3.0 (.NET Framework 3.5), for authentication tokens?
using System.Security.Cryptography;
...
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider())
{
byte[] tokenData = new byte[32];
rng.GetBytes(tokenData);
string token = Convert.ToBase64String(tokenData);
}
Upd 2022
in .Net 6 RNGCryptoServiceProvider()
is obsolete, usage of static methods of RandomNumberGenerator
is recommended
private string GetRandomlyGenerateBase64String(int count)
{
return Convert.ToBase64String(RandomNumberGenerator.GetBytes(count));
}
That depends on what you mean by fast...
There is no really fast secure random generator. If you want fast, you should use the regular Random class. If you want secure you should use the random generator in the Cryptography namespace, but that is significantly slower. You simply can't have both.
精彩评论