Ich möchte zufällige int-Werte mit System.Security.Cryptography von 0 bis 26 generieren, wie kann ich das tun? Ich weiß, kann system.random verwenden, um dies zu tun, aber ich möchte System.Security.Cryptography verwendenwie zufälligen int-Wert mit System.Security.Cryptography generieren
Antwort
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.
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)));
}
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
@ArtjomB., Es verwendet eine der Provider-Klasse 'RNGCryptoServiceProvider'. Siehe bearbeitete Antwort. Aber ja, es ist so geradlinig wie die 'Random' Klasse. – Rahul
Ja, das Beispiel ist der Kicker, aber Sie sollten im Allgemeinen beschreiben, wie es gemacht wird. –
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