Signatur
Beschreibung
gmp_random_seed() initialisiert den internen Zufallsgenerator der GMP-Bibliothek mit einem festen Startwert (Seed). Dadurch lassen sich Zufallszahlenfolgen, die mit Funktionen wie gmp_random() oder gmp_random_bits() erzeugt werden, reproduzierbar machen: Derselbe Seed liefert immer dieselbe Folge von Zufallszahlen.
Diese Funktion ist besonders nützlich bei Tests, Simulationen und kryptografischen Experimenten, bei denen eine deterministisch reproduzierbare Zufallsfolge benötigt wird. Der Parameter seed kann als PHP-Integer, als GMP-Objekt oder als numerischer String übergeben werden.
Wichtiger Hinweis: Da GMP einen eigenen, von PHP unabhängigen Zufallszustand verwaltet, beeinflusst gmp_random_seed() weder rand(), mt_rand() noch andere PHP-Zufallsfunktionen.
Für kryptografisch sichere Zufallszahlen sollte diese Funktion nicht verwendet werden. Nutzen Sie stattdessen random_bytes() oder random_int().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $seed Pflicht | GMP|int|string | Der Startwert (Seed) für den GMP-Zufallsgenerator. Kann ein PHP-Integer, ein GMP-Objekt oder ein numerischer String sein. Negative Werte sind erlaubt. |
Rückgabewert
Beispiele
Reproduzierbare Zufallszahlen mit festem Seed
<?php
// Seed setzen und drei Zufallszahlen mit 64 Bit erzeugen
gmp_random_seed(42);
$a = gmp_random_bits(64);
$b = gmp_random_bits(64);
$c = gmp_random_bits(64);
echo gmp_strval($a) . PHP_EOL;
echo gmp_strval($b) . PHP_EOL;
echo gmp_strval($c) . PHP_EOL;
// Seed erneut auf denselben Wert setzen -> identische Folge
gmp_random_seed(42);
$a2 = gmp_random_bits(64);
$b2 = gmp_random_bits(64);
$c2 = gmp_random_bits(64);
var_dump(gmp_cmp($a, $a2) === 0); // true
var_dump(gmp_cmp($b, $b2) === 0); // true
var_dump(gmp_cmp($c, $c2) === 0); // true
Seed als GMP-Objekt und sehr große Zahl
<?php
// Seed als sehr großes GMP-Objekt
$bigSeed = gmp_init('99999999999999999999999999999');
gmp_random_seed($bigSeed);
$zufallszahl = gmp_random_bits(128);
echo 'Zufallszahl (128 Bit): ' . gmp_strval($zufallszahl) . PHP_EOL;
// Erneut mit demselben Seed: gleiche Zahl
gmp_random_seed($bigSeed);
$zufallszahl2 = gmp_random_bits(128);
echo 'Gleich? ' . (gmp_cmp($zufallszahl, $zufallszahl2) === 0 ? 'Ja' : 'Nein') . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitswarnung: gmp_random_seed() und die darauf basierenden GMP-Zufallsfunktionen sind nicht kryptografisch sicher. Verwenden Sie sie niemals zur Erzeugung von Passwörtern, Tokens oder kryptografischen Schlüsseln. Für sicherheitskritische Anwendungen stehen random_bytes() und random_int() zur Verfügung.
Die Funktion ist seit PHP 7.2.0 verfügbar und ersetzt die früher verwendeten, plattformabhängigen GMP-Zufallsfunktionen mit verbesserter Portabilität des Zufallszustands.
Der GMP-Zufallszustand ist global pro PHP-Prozess. In Multi-Thread-Umgebungen oder bei parallelen Anfragen kann es zu Race Conditions kommen, wenn mehrere Threads denselben GMP-Zufallszustand verwenden.