我正在开发一个密码生成器,它将在网页上运行。我正在使用 .net 的内置功能Random()
;函数生成随机数。然后它们用于从字符串中选择不同的大写/小写字符和数字。
我想知道的是,它使用起来有多安全Random()
;生成密码的功能。请注意,这些密码会在 2 分钟后过期,并且页面将只允许每个 IP 地址生成 3 次。
如果你想要一个安全的随机数,你可以编写一个继承自System.Security.Cryptography.RandomNumberGenerator的类
System.Random
不安全。最大的弱点是它只有一个 31 位的种子,它是从一个可预测的来源 ( Environment.TickCount
) 播种的。因此,知道您的实例何时Random
创建的攻击者可能会将可能的密码缩小到少数几个。
算法本身也不安全。可能通过观察其中一些来预测未来的输出。
使用派生自 的类System.Security.Cryptography.RandomNumberGenerator
,例如RNGCryptoServiceProvider
生成安全随机数。
要生成一个安全的随机字符串,我建议我对如何在 C# 中生成随机 8 个字符的字母数字字符串?. 请注意,大多数其他答案都不安全。