当前位置:  开发笔记 > 编程语言 > 正文

.NET 3中System.Random的随机性如何?

如何解决《.NET3中System.Random的随机性如何?》经验,为你挑选了2个好方法。

我目前正在编写一个简单的密码生成器(C#).为此,我需要一些随机数字.

是否可以简单地使用.NET附带的Random类或者是否存在任何已知问题?



1> Michael Hare..:

它没有任何问题 - 它足以生成简单的密码.一个简单的例子(来源):

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作为随机数,另一个是加密随机数.

如果您正在考虑自己推出,那么网站开发者指南共享会提供一些信息来与您讨论.



2> 小智..:

System.Random 不是 "加密强"的随机源.假设攻击者知道(或可以猜测)用于创建System.Random的"种子"值,则Random函数的输出完全可预测.如果你只是调用新的System.Random(),那么初始值只是当前系统时间的表示(攻击者通常很容易猜到的东西).

即使初始时间不确切,攻击者也可以通过强力检查给定时间范围内的所有潜在值.

System.Security.Cryptography命名空间中的随机生成器设计用于此类情况,并从许多更安全的源中获得不可预测性.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有