Signatur
Beschreibung
Random\Engine\Xoshiro256StarStar ist eine PHP-Implementierung des xoshiro256**-Algorithmus ("xor/shift/rotate"), einem modernen, sehr schnellen Pseudozufallszahlengenerator mit 256-Bit-Zustand. Er eignet sich hervorragend für Simulationen, Spiele, Shuffles und andere nicht-kryptografische Anwendungsfälle, bei denen statistische Qualität und Geschwindigkeit wichtig sind.
Der Algorithmus hat eine Periode von 2256−1 und besteht den gängigen statistischen Tests (z. B. BigCrush). Er ist nicht kryptografisch sicher – für sicherheitsrelevante Anwendungen (Tokens, Passwörter usw.) sollte stattdessen Random\Engine\Secure verwendet werden.
Die Klasse implementiert das Interface Random\Engine und kann direkt in ein Random\Randomizer-Objekt eingesetzt werden. Dort stehen dann Methoden wie getInt(), shuffleArray() oder getBytes() zur Verfügung. Über den optionalen Seed-Parameter lassen sich reproduzierbare Zufallsfolgen erzeugen – ideal für Tests und Debugging.
Im Vergleich zu Random\Engine\Mt19937 ist xoshiro256** schneller und hat bessere statistische Eigenschaften, ist jedoch ebenso wenig für kryptografische Zwecke geeignet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $seed | string|int|null | null | Optionaler Startwert (Seed) für den Generator. Ein int oder ein genau 32 Byte langer string sind erlaubt. Bei null wird ein zufälliger Seed aus einer sicheren Quelle gewählt. Gleiche Seeds liefern immer dieselbe Sequenz – nützlich für reproduzierbare Ergebnisse in Tests. |
Beispiele
Grundlegende Verwendung mit Randomizer
<?php
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;
$engine = new Xoshiro256StarStar(42);
$randomizer = new Randomizer($engine);
echo $randomizer->getInt(1, 100) . PHP_EOL; // Reproduzierbare Zahl zwischen 1 und 100
echo $randomizer->getInt(1, 100) . PHP_EOL; // Nächste reproduzierbare Zahl
$array = range(1, 10);
$shuffled = $randomizer->shuffleArray($array);
print_r($shuffled);
Reproduzierbare Simulation mit String-Seed
<?php
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;
// String-Seed muss exakt 32 Bytes lang sein
$seed = str_pad('mein-test-seed', 32, "\0");
$engine = new Xoshiro256StarStar($seed);
$randomizer = new Randomizer($engine);
// Simulierte Würfelwürfe – immer identisch bei gleichem Seed
$rolls = [];
for ($i = 0; $i < 5; $i++) {
$rolls[] = $randomizer->getInt(1, 6);
}
echo implode(', ', $rolls) . PHP_EOL;
Zufälliger Seed (kein reproduzierbares Ergebnis)
<?php
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;
// seed = null → zufällig initialisiert, nicht reproduzierbar
$engine = new Xoshiro256StarStar();
$randomizer = new Randomizer($engine);
$bytes = bin2hex($randomizer->getBytes(8));
echo 'Zufällige Bytes: ' . $bytes . PHP_EOL;
// Wichtig · Fallstricke
Kein kryptografischer Generator: xoshiro256** ist nicht für sicherheitsrelevante Anwendungen geeignet. Zufallsfolgen können bei bekanntem Zustand vorhergesagt werden. Für kryptografische Zwecke (Tokens, Passwörter, Session-IDs) bitte Random\Engine\Secure oder random_bytes() verwenden.
Der String-Seed muss exakt 32 Bytes lang sein. Ein kürzerer oder längerer String führt zu einer ValueError-Exception. Mit str_pad() oder hash('sha256', $wert, true) kann ein beliebiger Eingabewert auf 32 Bytes gebracht werden.
Bei null als Seed wird der interne Zustand aus einer plattformspezifisch sicheren Quelle befüllt – das Ergebnis ist dann nicht reproduzierbar, aber auch nicht kryptografisch sicher im Sinne von CSPRNG.