小编Luc*_*rri的帖子

Microsoft是否更改了随机默认种子?

今天,我在.NET Core中进行了一些测试,并且遇到了一些有趣的事情。

以前(〜.NET Framework 4)Random使用过Environment.TickCount,但现在我相信情况已经改变。

考虑以下代码:

while (true)
{
    Random random = new Random();
    Console.WriteLine(random.Next(0, 10000));
}
Run Code Online (Sandbox Code Playgroud)

在较早的.NET Framework版本中,new Random()空构造函数将使用Environment.TickCount,这将导致伪随机值的重复。

因此,您可以期待如下结果:

542
4211
5244
5244
5244
9501
9501
Run Code Online (Sandbox Code Playgroud)

以此类推。

在使用最新编译器的最新.NET Core版本上,我收到以下结果:

5332
220
3928
524
2973
2840
4965
5667
657
6434
3170
3046
7044
Run Code Online (Sandbox Code Playgroud)

绝对可以改善。

在旧版本中,其他表现出此问题的SO问题:

如何生成随机整数?

在C#中生成没有重复的随机数

非重复随机数

C#随机数生成器线程安全吗?


我的设置:.NET Core 2.2 /最新的C#编译器。


实际问题

所以我的问题是,PRNG是否真的得到了改善,或者他们只是将构造函数更改为使用其他默认种子,如果是,则它们用作种子是什么?密码术现在是否更安全(如果他们实际上改变了实现)?

c# random

6
推荐指数
1
解决办法
141
查看次数

标签 统计

c# ×1

random ×1