gpt4 book ai didi

c# - RNGCryptoServiceProvider - 随机数审查

转载 作者:IT王子 更新时间:2023-10-29 04:21:47 26 4
gpt4 key购买 nike

在寻找生成真正随机数的最佳尝试时,我偶然发现了这个代码示例。

寻找关于这个片段的意见。

using System;
using System.Security.Cryptography;

private static int NextInt(int min, int max)
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buffer = new byte[4];

rng.GetBytes(buffer);
int result = BitConverter.ToInt32(buffer, 0);

return new Random(result).Next(min, max);
}

来源:http://www.vcskicks.com/code-snippet/rng-int.php

这是否比使用滴答计数种子更受欢迎,例如:

Random rand = new Random(Environment.TickCount); 
rand.Next(min, max);

注意:

我不是在寻找第三方随机数据提供者,例如 Random.org ,因为这样的依赖关系对应用程序来说是不现实的。

最佳答案

好吧,使用 RNGCryptoServiceProvider 可以为您提供不可猜测的加密强度种子,而 Environment.TickCount 在理论上是可以预测的。

另一个关键区别在快速连续多次调用您的 NextInt 方法时会很明显。使用 RNGCryptoServiceProvider 将每次使用不同的加密强度数字为 Random 对象播种,这意味着它将继续为每次调用返回不同的随机数。使用 TickCount 的风险是每次都使用相同的数字来为 Random 对象播种(如果在同一个“滴答”期间多次调用该方法),这意味着它将继续为每次调用返回相同的(假设是随机的)号码。

如果您真的需要真正随机数,那么您根本不应该使用计算机来生成它们:您应该测量放射性衰变或类似的东西,真正不可预测。

关于c# - RNGCryptoServiceProvider - 随机数审查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com