Random和RandomNumberGenerator类基本上都是伪随机数生成器,并且由于它们基于算法,因此它们的输出的随机性是有限制的 。
但是与Random相比,RandomNumberGenerator类被认为是加密安全的伪随机数生成器,因为它使用了许多其他环境参数(http://en.wikipedia.org/wiki/CryptGenRandom)来确保随机性。一些参数是:
- 当前进程ID
- 当前线程ID
- 自引导时间以来的滴答计数
- 当前时间
- 各种高精度性能计数器
- 用户环境块的 MD4 哈希
- 高精度内部 CPU 计数器
请浏览以下关于随机性的有趣阅读链接:http: //www.codinghorror.com/blog/2006/11/computers-are-lousy-random-number-generators.html
对于正常使用场景,例如在您的情况下生成密码,使用RandomNumberGenerator类就足够了(http://msdn.microsoft.com/en-us/library/system.random.aspx):
“例如,要生成适合创建随机密码的加密安全随机数,请使用派生自 System.Security.Cryptography.RandomNumberGenerator 的类,例如 System.Security.Cryptography.RNGCryptoServiceProvider。”