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

RNGCryptoServiceProvider的优缺点

如何解决《RNGCryptoServiceProvider的优缺点》经验,为你挑选了3个好方法。

什么是使用的利弊System.Security.Cryptography.RNGCryptoServiceProviderVS System.Random.我知道这RNGCryptoServiceProvider是"更随机",即黑客可预测性更低.任何其他利弊?


更新:

根据回复,以下是目前使用的利弊RNGCryptoServiceProvider:

优点

RNGCryptoServiceProvider 是一个更强大的加密随机数,这意味着它更适合确定加密密钥等.

缺点

Random更快,因为它是一个更简单的计算; 当在模拟或长时间计算中使用加密随机性不重要时,应该使用它.注意:有关模拟的详细信息,请参阅Kevin的答案 - Random不一定是随机的,您可能希望使用不同的非加密PRNG.

Charlie Mart.. 51

密码学上强大的RNG将会更慢 - 它需要更多的计算 - 并且将是光谱白色,但不太适合模拟或蒙特卡罗方法,因为它们确实需要更多时间,并且因为它们可能不可重复,这对测试很好.

通常,当您需要唯一的数字(如UUID)或加密密钥以及速度和模拟的确定性PRNG时,您希望使用加密PRNG.



1> Charlie Mart..:

密码学上强大的RNG将会更慢 - 它需要更多的计算 - 并且将是光谱白色,但不太适合模拟或蒙特卡罗方法,因为它们确实需要更多时间,并且因为它们可能不可重复,这对测试很好.

通常,当您需要唯一的数字(如UUID)或加密密钥以及速度和模拟的确定性PRNG时,您希望使用加密PRNG.


@CharlieMartin"功率谱是平坦的,并且没有更多可能的数字组".频谱是否平坦的事实不是意味着某些数字*组更有可能出现吗?在RNGCryptoServiceProvider中,每个位大约有50%的机会被设置,这意味着大约有一半位设置的数字将是最受欢迎的,并且只设置了几位的数字(或设置了所有位的值)将是非常不可能.

2> 小智..:

System.Random 不是线程安全的.


可能发生的更糟糕的是什么?你得到一些随机的结果吧?JK ......
MSDN似乎说RNGCryptoServiceProvider是线程安全的(http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx).
现在我想起来了,RNGCryptoServiceProvider也不是!
开玩笑说,它可以腐败自己并返回零(http://stackoverflow.com/a/11109361/155892).(http://dilbert.com/strips/comic/2001-10-25/)

3> Jader Dias..:

是的,只有一个.正如查理马丁写System.Random的更快.

我想添加以下信息:

RNGCryptoServiceProvider是符合安全标准的随机数生成器的默认实现.如果出于安全目的需要随机变量,则必须使用此类或等效项,但不要使用System.Random,因为它具有高度可预测性.

对于所有其他用途System.Random,欢迎更高性能和等效类.

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