Heim >Backend-Entwicklung >PHP-Problem >So verwenden Sie einen kryptografischen Pseudozufallszahlengenerator mit PHP

So verwenden Sie einen kryptografischen Pseudozufallszahlengenerator mit PHP

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-05-27 17:46:211917Durchsuche

In diesem Artikel erfahren Sie, wie Sie einen verschlüsselten Pseudozufallszahlengenerator in PHP verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

So verwenden Sie einen kryptografischen Pseudozufallszahlengenerator mit PHP

Heute stellen wir den verschlüsselten Pseudozufallszahlengenerator (CSPRNG-Erweiterung) in PHP vor. Die Generierung von Zufallszahlen ist eigentlich sehr einfach, verwenden Sie einfach die Funktion rand() oder mt_rand(), aber wir sprechen heute über eine Reihe von Zufallszahlengeneratoren, die einen komplexeren Algorithmus verwenden. rand() wird nicht mehr empfohlen und ist jetzt eine Mainstream-Funktion. Die Funktion zur Erzeugung verschlüsselter Pseudozufallszahlen ist kryptografisch sicher und etwas langsamer als mt_rand(). Es muss auf einige Funktionen des Betriebssystems angewiesen sein, über die wir später sprechen werden.

Diese Verschlüsselungserweiterung wurde in PHP7 integriert und erfordert keine spezielle Installation. Wenn es sich um eine Version unter PHP7 handelt, müssen Sie die Erweiterung unabhängig installieren. Sollten Sie beim Testen die unten beschriebenen Funktionen nicht finden, prüfen Sie bitte Ihre aktuelle PHP-Version.

Pseudozufällige Zeichengenerierung

var_dump(bin2hex(random_bytes(5)));
// string(10) "f28dc2bdd5"
var_dump(random_bytes(5));
// string(5) "�"��"

random_bytes() Jeder Aufruf generiert eine Binärzeichenfolge mit unterschiedlichem Inhalt, und der Parameter ist die binäre Bytelänge. Die direkt erhaltenen Binärdaten liegen im verstümmelten Format vor. Daher müssen wir im Allgemeinen bin2hex () verwenden, um die Binärdaten in eine für uns verständliche Zeichenfolge im Hexadezimalformat umzuwandeln. Das Ergebnis ist jedoch, dass die hexadezimale Zeichenlänge nach unserer Konvertierung doppelt so groß ist wie die von uns festgelegte Zeichenlänge. Die Funktion dieser Funktion kann für uns einen sicheren Benutzerpasswort-Salt, ein Schlüsselschlüsselwort oder einen Initialisierungsvektor generieren.

random_bytes() generiert bei jedem Aufruf eine Zeichenfolge mit einem anderen Inhalt, und der Parameter ist ein zufälliges Zeichen mit einer Zeichenlänge. Hier übergeben wir 5 und geben 10 Zeichen zurück. Es ist ersichtlich, dass dieser Parameter die Anzahl der Zeichen ist , und Was zurückgegeben wird, ist tatsächlich die Anzahl der Bytes, entsprechend der Rückgabeform, in der ein Zeichen zwei Bytes belegt. Oder wir können uns einfach daran erinnern, dass es doppelt so viele Parameter zurückgibt. Was die Rolle dieser Funktion betrifft, kann sie für uns einen sicheren Benutzerpasswort-Salt, ein Schlüsselschlüsselwort oder einen Initialisierungsvektor generieren.

Pseudo-zufällige Ganzzahlgenerierung

var_dump(random_int(100, 999));
var_dump(random_int(-1000, 0));
// int(900)
// int(-791)

Für die Generierung von Ganzzahlen ist es noch einfacher, zwei Parameter für die Funktion random_int() anzugeben, die den Bereich der zufälligen Ganzzahlen darstellen. Tatsächlich wird es genauso verwendet wie mt_rand().

Generierungsquelle

Die Generierungsquellen der beiden oben genannten kryptografischen Pseudozufallsfunktionen hängen wie folgt vom Betriebssystem ab:

  • In Windows-Systemen wird die Funktion CryptGenRandom() verwendet. CNG-API wird ab 7.2.0 verwendet

  • In Linux-Systemen wird der Linux-Systemaufruf getrandom(2) verwendet

  • In anderen Systemen wird /dev/urandom verwendet

  • Ansonsten ein Es wird eine Ausnahme ausgelöst

Ausnahmen

Diese beiden Funktionen haben auch entsprechende Ausnahmen, die beispielsweise auftreten, wenn die Generierungsquelle oben nicht gefunden werden kann. Darüber hinaus wird natürlich eine Ausnahme ausgelöst Es kann auch andere Faktoren geben, die zu Ausnahmen führen.

  • Eine Ausnahme wird ausgelöst, wenn keine geeignete Zufallsquelle gefunden wird.

  • TypeError wird ausgelöst, wenn das angegebene Argument ungültig ist.

  • Es wird ein Fehler ausgelöst, wenn die angegebene Bytelänge ungültig ist

  • Der heutige Inhalt ist sehr einfach und ich habe auch die Nützlichkeit der Funktion random_bytes() entdeckt. In Zukunft muss ich nicht mehr selbst eine Funktion schreiben, um zufällig Salt zu generieren, genau wie der Artikel über das Salzen von Passwörtern zwischen uns. „Salt“-Passwörter? Wie können Sie Ihre Benutzerpasswörter sicher „salzen“? Die Funktion zur zufälligen Zeichengenerierung (generateSalt) kann grundsätzlich dadurch ersetzt werden. Haben Sie nicht das Gefühl, dass Sie viel gelernt haben? Lassen Sie uns gemeinsam weitere interessante Inhalte erkunden! !

Testcode:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84%E5%8A%A0%E5%AF%86%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.php

Empfohlenes Lernen:

php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verwenden Sie einen kryptografischen Pseudozufallszahlengenerator mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen