如何在C#中生成加密安全的伪随机数?

Alo*_*kin 56 c# cryptography

对于身份验证令牌,是否有针对C#3.0(.NET Framework 3.5)的加密安全伪随机数生成器(CSPRNG)的快速实现?

Joh*_*zen 106

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

    string token = Convert.ToBase64String(tokenData);
}
Run Code Online (Sandbox Code Playgroud)

  • WinAPI GUID生成器的密码分析表明,由于V4 GUID的序列是伪随机的,因此在给定初始状态的情况下,可以预测函数UuidCreate返回的下一个250 000 GUID.这就是GUID不应该用于密码学的原因,例如,作为随机密钥.(来自http://en.wikipedia.org/wiki/Globally_Unique_Identifier) (32认同)
  • 一个常见的攻击是DDoS服务器,直到它重新启动.然后预测初始状态(系统时钟)要容易得多. (14认同)

Ser*_*.ID 15

.Net 6 中的Upd 2022已过时,建议RNGCryptoServiceProvider()使用静态方法RandomNumberGenerator

private string GetRandomlyGenerateBase64String(int count)
{
    return Convert.ToBase64String(RandomNumberGenerator.GetBytes(count));
}
Run Code Online (Sandbox Code Playgroud)