2017-08-04 77 views
-1

我正在寻找一个函数,将返回C#Random类的基础上产生的前两个int数Random.Next()。我想避免暴力(这是我试过的)。从本质上讲,我期待为这个代码反向功能,不基于蛮力如何获得随机种子给予前2个伪随机数

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 

有一个快速的方法来获得Seed给出Rnd1Rnd2

+0

那么你尝试?我预计已经采取了一些步骤,至少提供了有关.NET中使用的PRNG的信息(?)。这样做,你可能会发现一个看起来容易被利用的公式,非常容易(太适合给出你的常数2),这让我想,这是来自某种编码测试或竞争? – sascha

+0

你可以找到Random [here]的源代码(https://referencesource.microsoft.com/#mscorlib/system/random.cs,4c2fc83207c654d1) – spectacularbob

+0

[这篇文章是否有用?](https:// stackoverflow。 COM /问题/ 17420424 /确定最种子的-C-尖锐随机实例)。似乎表明这是不可能的,或者至少蛮力其实是相当快的。 – Equalsk

回答

0

在一个可能得到的种子,但没有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

+0

嗯,我正在寻找类似于:int GetSeed(int firstRnd,int SecondRnd)'。条件是:给出两个数字,找到种子 – oleksii

+0

啊好的,也许这[网站](https://jazzy.id.au/2010/09/20/cracking_random_number_generators_part_1.html)可以帮助你。 –