2017-08-04 81 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)可以幫助你。 –