【问题标题】:How to get Random seed given first 2 pseudo random numbers如何在给定前 2 个伪随机数的情况下获得随机种子
【发布时间】:2017-08-04 14:50:27
【问题描述】:

我正在寻找一个函数,它将根据Random.Next() 生成的前两个 int 数字返回 C# Random 类的种子。我想避免蛮力(这是我尝试过的)。本质上,我正在为这段代码寻找一个反向函数,它不是基于蛮力的

using System;

public class Program
{
    public static void Main()
    {
        int seed = 0;
        Random rnd = new Random(seed);
        Console.WriteLine($"Seed: {seed}");
        Console.WriteLine($"Rnd1: {rnd.Next()}");
        Console.WriteLine($"Rnd2: {rnd.Next()}");
    }
}

打印出来的

Seed: 0
Rnd1: 1559595546
Rnd2: 1755192844

在给定Rnd1Rnd2 的情况下,有没有一种快速获取Seed 的方法?

【问题讨论】:

  • 那么你尝试了什么?我预计已经采取了一些步骤,至少提供了有关 .NET(?)中使用的 PRNG 的信息。这样做,你可能会发现一个看起来很容易被利用的公式,非常容易(给你的常数 2 太合适了)这让我觉得,这来自某种编码测试或竞争?
  • 你可以找到Random here的来源
  • Is this post of any use?。这似乎表明这是不可能的,或者至少蛮力实际上相当快。
  • @sascha 我试过蛮力,这是可行的,但我想用它来做需要很长时间。这不是来自编码测试,而是我在考虑火车上的一个特定问题。
  • @Equalsk 看起来可行,至少在Oracle Java

标签: c# random random-seed


【解决方案1】:

您好,有一种可能获得种子,但没有rnd1rnd2 将执行以下操作

  var tickCount = Environment.TickCount;
        var random = new Random();
        var seededRandom = new Random(tickCount);


        for (int i = 0; i < 100000000; i++)
        {
            // Does not enter the if case at any point.
            if (random.Next() != seededRandom.Next())
            {
                Console.WriteLine("No match");
            }
        }

来源:http://referencesource.microsoft.com/#mscorlib/system/random.cs,53

【讨论】:

  • 好吧,我正在寻找类似的东西:int GetSeed(int firstRnd, int SecondRnd)。条件是:给定两个数,找到一个种子
  • 啊,好吧,也许这个site可以帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多