2016-07-29 8 views

Antwort

-1

Dann sollten Sie RandomNumberGenerator Klasse für diesen Zweck verwenden. Aber pro was Sie geschrieben haben von 0 bis 26 Ich glaube, Sie sollten Random Klasse für diesen Zweck verwenden.

Für einen speziellen Zweck ein kryptographisches starke Zufallszahlen zu erzeugen, sollten Sie RNGCryptoServiceProvider Klasse verwenden, die von RandomNumberGenerator Klasse erbt und bietet Mechanismus für Verschlüsselungszufallszahlen anstelle der Verwendung RandomNumberGenerator Klasse direkt.

Sie können ein Beispiel in der verknüpften MSDN-Dokumentation sehen.

+0

@ArtjomB., Es verwendet eine der Provider-Klasse 'RNGCryptoServiceProvider'. Siehe bearbeitete Antwort. Aber ja, es ist so geradlinig wie die 'Random' Klasse. – Rahul

+0

Ja, das Beispiel ist der Kicker, aber Sie sollten im Allgemeinen beschreiben, wie es gemacht wird. –

+0

Poster sollte nicht Random() verwenden, da er eine Zahl von 0 bis 26 generieren möchte. Der Bereich bestimmt nicht die Methode, die Verwendung. Wenn er einen sehr zufälligen Wert in diesem Bereich benötigt, sollte er System.Security.Cryptography dafür verwenden. Anon Cowards Antwort ist ein gutes Beispiel für die Zusammenarbeit. – MadTigger

3

Sie können dies verwenden, um ein zufälliges int von einem Crypto RNG zu generieren. Ich würde mich jedoch schwer tun, ein Szenario außerhalb der Kryptographie zu erklären, wo solch ein Werkzeug nützlich ist.

RNGCryptoServiceProvider CprytoRNG = new RNGCryptoServiceProvider(); 

// Return a random integer between a min and max value. 
int RandomIntFromRNG(int min, int max) 
{ 
    // Generate four random bytes 
    byte[] four_bytes = new byte[4]; 
    CprytoRNG.GetBytes(four_bytes); 

    // Convert the bytes to a UInt32 
    UInt32 scale = BitConverter.ToUInt32(four_bytes, 0); 

    // And use that to pick a random number >= min and < max 
    return (int)(min + (max - min) * (scale/(uint.MaxValue + 1.0))); 
} 
+0

Abgesehen von dem Tippfehler in 'CprytoRNG' (" crypto "ist mein üblicher Täter) ist die bevorzugte Methode,' RandomNumberGenerator rng = RandomNumberGenerator.Create() 'zu verwenden, anstatt direkt vom Typ RNGCryptoServiceProvider abhängig zu sein (es sei denn, Factory wurde über CryptoConfig auf einen Nicht-CSPRNG umgestellt). RandomNumberGenerator.Create() ist in .NET Core vorhanden, die RNGCryptoServiceProvider-Klasse jedoch nicht. – bartonjs

Verwandte Themen