In diesem Artikel wird hauptsächlich die CSPRNG-Funktion in PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.
1. Was ist CSPRNG?
Ein kryptografisch sicherer Pseudozufallszahlengenerator (Cryptographically Secure Pseudorandom Number Generator, abgekürzt CSPRNG) ist eine Pseudozufallszahl Zufallszahlengenerator (PRNG), der für kryptografische Algorithmen geeignete Pseudozufallszahlen generiert.
CSPRNG kann hauptsächlich verwendet werden für:
Schlüsselgenerierung (z. B. Generieren komplexer Schlüssel)
Zufällige Passwörter für neue Benutzer generieren
Verschlüsselungssystem
Holen Sie sich einen Schlüsselaspekt Der Schlüssel zu hoher Sicherheit liegt in der Zufälligkeit hoher Qualität
2. CSPRNG in PHP7
PHP 7 führt zwei neue Funktionen ein, die zur Implementierung von CSPRNG verwendet werden können: random_bytes und random_int .
Die Funktion random_bytes gibt eine Zeichenfolge zurück und akzeptiert einen int-Eingabeparameter, der die Anzahl der Bytes des zurückgegebenen Ergebnisses darstellt.
Beispiel:
$bytes = random_bytes('10'); var_dump(bin2hex($bytes)); //possible ouput: string(20) "7dfab0af960d359388e6"
random_int-Funktion gibt eine int-Zahl innerhalb des angegebenen Bereichs zurück.
Beispiel:
var_dump(random_int(1, 100)); //possible output: 27
3. Hintergrundlaufumgebung
Die Zufälligkeit der oben genannten Funktionen variiert je nach Umgebung:
Unter Windows wird immer CryptGenRandom() verwendet.
Auf anderen Plattformen wird arc4random_buf() verwendet, sofern verfügbar (etabliert auf BSD-Serien oder Systemen mit libbsd)
Wenn keiner der oben genannten Punkte zutrifft, wird ein Linux-Systemaufruf getrandom(2) verwendet.
Wenn nicht, wird /dev/urandom als letztes verfügbares Tool verwendet
Wenn keiner der oben genannten Schritte funktioniert, gibt das System einen Fehler aus
Ein einfacher Test
Ein gutes Zufallszahlengenerierungssystem gewährleistet eine angemessene Generierungsqualität. Um diese Qualität zu überprüfen, werden in der Regel eine Reihe statistischer Tests durchgeführt. Ohne sich mit komplexen Statistikthemen zu befassen, kann der Vergleich eines bekannten Verhaltens mit den Ergebnissen eines Zahlengenerators bei der Qualitätsbewertung hilfreich sein.
Ein einfacher Test ist das Würfelspiel. Angenommen, die Wahrscheinlichkeit, einen Würfel einmal zu würfeln, um ein Ergebnis von 6 zu erhalten, beträgt 1/6. Wenn ich dann 100 Mal gleichzeitig 3 Würfel würfele, sieht das Ergebnis ungefähr wie folgt aus:
0 6 = 57,9 Mal
1 6 = 34,7 Mal
2 6s = 6,9 Mal
3 6s = 0,5 Mal
Das Folgende ist der Code, um 1.000.000 Mal Würfeln zu implementieren:
$times = 1000000; $result = []; for ($i=0; $i<$times; $i++){ $dieRoll = array(6 => 0); //initializes just the six counting to zero $dieRoll[roll()] += 1; //first die $dieRoll[roll()] += 1; //second die $dieRoll[roll()] += 1; //third die $result[$dieRoll[6]] += 1; //counts the sixes } function roll(){ return random_int(1,6); } var_dump($result);
Die Verwendung von PHP7s random_int und der einfachen Rand-Funktion kann zu den folgenden Ergebnissen führen
Wenn Sie zuerst rand und random_int sehen Mehr Für einen guten Vergleich können wir eine Formel anwenden und die Ergebnisse in einem Diagramm darstellen. Die Formel lautet: (PHP-Ergebnis – erwartetes Ergebnis)/erwartetes Ergebnis hoch 0,5.
Das Ergebnisdiagramm sieht wie folgt aus:
(Werte nahe 0 sind besser)
Obwohl die Ergebnisse von 3 6er sind nicht gut abschneiden, und dieser Test ist für praktische Anwendungen zu einfach. Wir können immer noch sehen, dass random_int besser abschneidet als rand.
Darüber hinaus ist das Sicherheitsniveau unserer Anwendung auf die Unvorhersehbarkeit und das wiederholbare Verhalten von zurückzuführen Zufallszahlengenerator.
Zusammenfassung : Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.
Verwandte Empfehlungen:
Beispielanalyse des Ausführungszyklus von PHP-Prinzipien
Detaillierte Erläuterung der PHP-Quellcode-Verzeichnisstruktur und Funktionsbeschreibung
Detaillierte Schritt-für-Schritt-Anleitung für die modulare Installation von PHP
Das obige ist der detaillierte Inhalt vonCSPRNG-Funktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!