Generieren hochwertiger Zufalls-Seeds für Pseudozufallszahlengeneratoren
Die Initialisierung des Pseudozufallszahlengenerators (PRNG) mit srand () ist entscheidend für die Generierung hochwertiger Zufallszahlen. In dem Artikel, auf den Sie verwiesen haben, wird vorgeschlagen, die Ausgabe der Funktion time() als Startwert zu verwenden und dabei ihren charakteristischen Wert jede Sekunde zu berücksichtigen. Bei Anwendungen, die mehrmals pro Sekunde ausgeführt werden, kann dieser Ansatz jedoch zu Kollisionen führen.
Eine zuverlässigere Alternative besteht darin, mehrere Entropiequellen zu kombinieren, um einen robusten Seed zu erzeugen. Ein empfohlener Ansatz für tragbare Linux-Anwendungen ist die Verwendung der folgenden Formel:
unsigned long seed = mix(clock(), time(NULL), getpid());
Hier ist mix() eine Funktion, die drei Entropiequellen kombiniert:
Durch die Kombination dieser Quellen generieren wir einen Seed, der sehr unverwechselbar ist und eine überlegene Grundlage bietet für das PRNG.
Die mix()-Funktion ist eine modifizierte Version der 96-Bit-Mix-Funktion von Robert Jenkins, die die Eingabewerte effektiv verschlüsselt, um eine stark zufällige Ausgabe zu erzeugen Samen.
Das obige ist der detaillierte Inhalt vonWie können wir hochwertige Zufalls-Seeds für Pseudozufallszahlengeneratoren generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!