2017-08-04 4 views
-1

Ich bin auf der Suche nach einer Funktion, die einen Samen der C# Random Klasse basierend auf den ersten beiden int Zahlen von Random.Next() produziert zurückgibt. Ich möchte rohe Gewalt vermeiden (das habe ich versucht). Im Grunde bin ich für eine Reverse-Funktion für diesen Code suchen, das nicht auf Brute-Force-BasisWie bekomme ich Random Seed gegeben ersten 2 Pseudozufallszahlen

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()}"); 
    } 
} 

Welche

druckt
Seed: 0 
Rnd1: 1559595546 
Rnd2: 1755192844 

Gibt es einen schnellen Weg Seed gegeben Rnd1 und Rnd2 zu erhalten?

+0

Also, was haben Sie versucht? Ich habe einige Schritte erwartet, zumindest Informationen über den in .NET verwendeten PRNG (?). Wenn du das tust, wirst du wahrscheinlich eine Formel finden, die leicht auszunutzen scheint, ziemlich einfach (zu passend, um deine Konstante von 2 zu geben), was mich denken lässt, dass dies von einer Art Codierungstest oder Konkurrenz herrührt? – sascha

+0

Sie können die Quelle für Random finden [hier] (https://referencesource.microsoft.com/#mscorlib/system/random.cs4c2fc83207c654d1) – spectacularbob

+0

[Ist dieser Beitrag von irgendeiner Verwendung?] (Https: // stackoverflow. com/questions/17420424/bestimmen-die-seed-of-c-sharp-random-instance). Es scheint, dass es nicht möglich ist, oder zumindest diese rohe Gewalt ist eigentlich ziemlich schnell. – Equalsk

Antwort

0

Hallo ein möglich, den Samen zu bekommen, aber ohne rnd1 und rnd2 würde folgende

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"); 
      } 
     } 

Quelle zu tun: http://referencesource.microsoft.com/#mscorlib/system/random.cs,53

+0

Nun, ich bin auf der Suche nach etwas wie: 'int GetSeed (int firstRnd, int SecondRnd)'. Die Bedingung ist: gegeben zwei Zahlen, finden Sie einen Samen – oleksii

+0

Ah ok, vielleicht kann diese [Website] (https://jazzy.id.au.au/2010/09/20/cracking_random_number_generators_part_1.html) Ihnen helfen. –

Verwandte Themen