2

我正在开发一个密码生成器,它将在网页上运行。我正在使用 .net 的内置功能Random();函数生成随机数。然后它们用于从字符串中选择不同的大写/小写字符和数字。

我想知道的是,它使用起来有多安全Random();生成密码的功能。请注意,这些密码会在 2 分钟后过期,并且页面将只允许每个 IP 地址生成 3 次。

4

3 回答 3

6

Random如果您需要密码安全,请勿使用。

使用RNGCryptoServiceProvider.

使用加密服务提供商 (CSP) 提供的实现来实现加密随机数生成器 (RNG)。这个类不能被继承。

于 2013-01-10T14:29:24.847 回答
5

如果你想要一个安全的随机数,你可以编写一个继承自System.Security.Cryptography.RandomNumberGenerator的类

于 2013-01-10T14:29:09.997 回答
3

System.Random不安全。最大的弱点是它只有一个 31 位的种子,它是从一个可预测的来源 ( Environment.TickCount) 播种的。因此,知道您的实例何时Random创建的攻击者可能会将可能的密码缩小到少数几个。

算法本身也不安全。可能通过观察其中一些来预测未来的输出。

使用派生自 的类System.Security.Cryptography.RandomNumberGenerator,例如RNGCryptoServiceProvider生成安全随机数。

要生成一个安全的随机字符串,我建议我对如何在 C# 中生成随机 8 个字符的字母数字字符串?. 请注意,大多数其他答案都不安全。

于 2013-01-10T14:32:54.160 回答