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
和等价类的更高性能。