什么是使用的利弊System.Security.Cryptography.RNGCryptoServiceProvider
VS System.Random
.我知道这RNGCryptoServiceProvider
是"更随机",即黑客可预测性更低.任何其他利弊?
更新:
根据回复,以下是目前使用的利弊RNGCryptoServiceProvider
:
RNGCryptoServiceProvider
是一个更强大的加密随机数,这意味着它更适合确定加密密钥等.
Random
更快,因为它是一个更简单的计算; 当在模拟或长时间计算中使用加密随机性不重要时,应该使用它.注意:有关模拟的详细信息,请参阅Kevin的答案 - Random
不一定是随机的,您可能希望使用不同的非加密PRNG.
Charlie Mart.. 51
密码学上强大的RNG将会更慢 - 它需要更多的计算 - 并且将是光谱白色,但不太适合模拟或蒙特卡罗方法,因为它们确实需要更多时间,并且因为它们可能不可重复,这对测试很好.
通常,当您需要唯一的数字(如UUID)或加密密钥以及速度和模拟的确定性PRNG时,您希望使用加密PRNG.
密码学上强大的RNG将会更慢 - 它需要更多的计算 - 并且将是光谱白色,但不太适合模拟或蒙特卡罗方法,因为它们确实需要更多时间,并且因为它们可能不可重复,这对测试很好.
通常,当您需要唯一的数字(如UUID)或加密密钥以及速度和模拟的确定性PRNG时,您希望使用加密PRNG.
System.Random
不是线程安全的.
是的,只有一个.正如查理马丁写System.Random
的更快.
我想添加以下信息:
这RNGCryptoServiceProvider
是符合安全标准的随机数生成器的默认实现.如果出于安全目的需要随机变量,则必须使用此类或等效项,但不要使用System.Random,因为它具有高度可预测性.
对于所有其他用途System.Random
,欢迎更高性能和等效类.