RNGCryptoServiceProvider的优点和缺点

什么是使用System.Security.Cryptography.RNGCryptoServiceProvider vs System.Random利弊。 我知道RNGCryptoServiceProvider是“更随机的”,即对黑客的可预测性较低。 任何其他的利弊?


更新:

根据回答,以下是到目前为止使用RNGCryptoServiceProvider优缺点:

优点

  • RNGCryptoServiceProvider是一个更强的密码随机数,这意味着它将更好地确定encryption密钥等。

缺点

  • Random更快,因为它是一个更简单的计算; 当在密码随机性不重要的模拟或长时间计算中使用时,应该使用它。

密码强的RNG将会变慢 – 需要更多的计算 – 并且将是光谱上的白色,但不太适合模拟或蒙特卡罗方法,这是因为它们需要更多时间,并且因为它们可能不可重复,这是很好的testing。

一般来说,当你想要一个像UUID这样的唯一编号,或者作为encryption密钥,以及一个用于速度和模拟的确定性PRNG时,你想要使用encryptionPRNG。

System.Random不是线程安全的。

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

我想添加以下信息:

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

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