How can I generate a cryptographically secure pseudorandom number in C#?
对于认证令牌,是否有针对C_3.0(.NET Framework 3.5)的加密安全伪随机数生成器(CSPRNG)的快速实现?
1 2 3 4 5 6 7 8 9
| using System.Security.Cryptography;
...
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider ())
{
byte[] tokenData = new byte[32];
rng .GetBytes(tokenData );
string token = Convert .ToBase64String(tokenData );
} |
- winapi guid生成器的密码分析表明,由于v4 guid的序列是伪随机的,因此,在给定初始状态的情况下,可以预测函数uuidcreate返回的最多250 000个guid。这就是为什么在密码学中不应将guid用作随机密钥的原因。(来自en.wikipedia.org/wiki/globally_unique_identifier)
- 这不是密码术,Tho。而且,很难预测机器的初始状态。
- 常见的攻击是在服务器重新启动之前对其进行ddos攻击。然后预测初始状态(系统时钟)就容易多了。
嗯,这取决于你的均按市房……
真的有没有固定的随机发生器的安全。如果你想要,你应该使用"类正则随机。如果你想要的时候你应该使用"随机发生器的cryptography命名空间,但这是slower明显。你不能简单的都有。
- 如果您愿意与本机加密实现进行互操作,那么您可以同时拥有出色的性能(比System.Random快几倍)和安全性。
- @密码混乱:所以,快速,安全,简单-选择任意两个。:)
《rngcryptoserviceprovider舱