Generierung von Zufallszahlen

C#:
Generierung von Zufallszahlen

Wie geht das:

Die gebräuchlichste Methode, um Zufallszahlen in C# zu generieren, ist die Verwendung der System.Random Klasse. Hier ist ein einfaches Beispiel, das deren Nutzung demonstriert:

using System;

public class RandomNumberExample
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int randomNumber = random.Next(1, 100); // Generiert eine Zahl zwischen 1 und 99
        Console.WriteLine($"Zufallszahl: {randomNumber}");
    }
}

Dies wird eine zufällige Zahl ausgeben wie:

Zufallszahl: 42

Um eine zufällige Gleitkommazahl zwischen 0,0 und 1,0 zu generieren, können Sie die Methode NextDouble verwenden:

double randomDouble = random.NextDouble();
Console.WriteLine($"Zufälliger Double-Wert: {randomDouble}");

Wenn Sie an einer sicherheitskritischen Anwendung arbeiten, die kryptographische Zufälligkeit erfordert, ist es besser, die RNGCryptoServiceProvider Klasse aus System.Security.Cryptography zu verwenden:

using System;
using System.Security.Cryptography;

public class SecureRandomExample
{
    static void Main()
    {
        byte[] randomNumber = new byte[4]; // Erstellt eine 4 Byte lange Zufallszahl
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            rng.GetBytes(randomNumber);
        }
        int value = BitConverter.ToInt32(randomNumber, 0);
        Console.WriteLine($"Kryptographisch sichere Zufallszahl: {value}");
    }
}

Vertiefung

Die Generierung von Zufallszahlen in C# hat sich im Laufe der Jahre weiterentwickelt. Ursprünglich war die System.Random Klasse der Standard für die Erzeugung von Pseudozufallszahlen. Es ist pseudozufällig, weil es, gegeben einen spezifischen Seed-Wert, die gleiche Zahlenfolge produzieren wird, was für das Debuggen oder die Wiederholbarkeit von Tests nützlich sein kann.

Obwohl sie für grundlegende Bedürfnisse ausreichend ist, ist System.Random nicht threadsicher und kann vorhersehbare Ergebnisse liefern, was für sicherheitsabhängige Anwendungen nicht geeignet ist. Diese Einschränkung führte zur Einführung des RNGCryptoServiceProvider für kryptographische Zufälligkeit, der sicherer, aber auch ressourcenintensiver ist.

Eine Alternative in .NET Core und .NET 5+ ist die RandomNumberGenerator Klasse in System.Security.Cryptography zur sicheren Generierung von Zufallszahlen, die als eine modernere und benutzerfreundlichere Option im Vergleich zu RNGCryptoServiceProvider gedacht ist.

Jede Methode zur Generierung von Zufallszahlen in C# hat ihren Platz, abhängig von den Anforderungen der Anwendung. Für die meisten Anwendungen reicht System.Random aus, aber für diejenigen, die sichere, unvorhersehbare Zufallszahlen erfordern, bieten die kryptographischen Klassen eine robuste Alternative.