我目前正在编写一个简单的密码生成器(C#).为此,我需要一些随机数字.
是否可以简单地使用.NET附带的Random类或者是否存在任何已知问题?
它没有任何问题 - 它足以生成简单的密码.一个简单的例子(来源):
Random RandomClass = new Random(); int RandomNumber = RandomClass.Next(); // Random number between 1 and 2147483647 double RandomNumber = RandomClass.Next(1,10); // Random number between 1 and 10 double RandomDouble = RandomClass.NextDouble(); // Random double between 0.0 and 1.0
文章如何:生成随机密码(C#/ VB.NET)有一个非常全面的例子,可以生成具有指定复杂性的良好,易于读取的密码.这对你来说可能有点过分,但它可能提供一个很好的来源来复制想法.
如果您需要更多用于加密的内容,那么还有另一个命名空间:
System.Security.Cryptography
具体来说,你可以使用这个:
System.Security.Cryptography.RNGCryptoServiceProvider.GetBytes(yourByte)
一个例子是在VB.NET中使用Crypto作为随机数,另一个是加密随机数.
如果您正在考虑自己推出,那么网站开发者指南共享会提供一些信息来与您讨论.
System.Random 不是 "加密强"的随机源.假设攻击者知道(或可以猜测)用于创建System.Random的"种子"值,则Random函数的输出完全可预测.如果你只是调用新的System.Random(),那么初始值只是当前系统时间的表示(攻击者通常很容易猜到的东西).
即使初始时间不确切,攻击者也可以通过强力检查给定时间范围内的所有潜在值.
System.Security.Cryptography命名空间中的随机生成器设计用于此类情况,并从许多更安全的源中获得不可预测性.