Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich in PHP sicher Zufallszahlen für Anwendungen wie das Zurücksetzen von Passwörtern generieren?

Wie kann ich in PHP sicher Zufallszahlen für Anwendungen wie das Zurücksetzen von Passwörtern generieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-01 15:53:12218Durchsuche

How Can I Securely Generate Random Numbers in PHP for Applications Like Password Reset?

Sichere Zufallszahlengenerierung in PHP: Ein umfassender Überblick

Kryptographie erfordert oft die Generierung unvorhersehbarer Zufallszahlen. In PHP erfüllt die Funktion „mt_rand“ diese Anforderungen nicht. Dieser Artikel befasst sich mit einer sicheren Methode zum Generieren von Zufallszahlen in PHP selbst und geht dabei auf das Problem vergessener Passwörter ein.

Die ursprünglich vorgeschlagene Lösung besteht darin, einen Startwert zu speichern und ihn bei jedem Aufruf zu aktualisieren, wie folgt:

result = seed
seed = sha512(seed . mt_rand())

Dieser Ansatz weist jedoch erhebliche Nachteile auf. Die Funktion sha512 erhöht die Entropie nicht auf magische Weise und der Aufruf „mt_rand“ reicht nicht aus, um einen Gegner abzuwehren. Stattdessen empfiehlt es sich, die von modernen Betriebssystemen bereitgestellten Entropiequellen zu nutzen:

  • Unix-Plattformen: „/dev/urandom“
  • Windows-Plattformen: Kryptografische API

Hier ist ein PHP-Codeausschnitt zum Generieren eines sicheren 128-Bit-Zufalls string:

$pr_bits = '';
if (file_exists("/dev/urandom")) {
    $fp = fopen('/dev/urandom','rb');
    $pr_bits .= fread($fp, 16);
    fclose($fp);
} elseif (class_exists('COM')) {
    try {
        $CAPI_Util = new COM('CAPICOM.Utilities.1');
        $pr_bits .= $CAPI_Util->GetRandom(16, 0);
        if ($pr_bits) { $pr_bits = md5($pr_bits, TRUE); }
    } catch (Exception $ex) {
        // echo 'Exception: ' . $ex->getMessage();
    }
}

if (strlen($pr_bits) < 16) {
    // Inform the administrator of the missing pseudorandom generator
}

Denken Sie daran, beide Entropiequellenversuche in Ihren Code aufzunehmen, um maximale Portabilität zu gewährleisten. Obwohl diese Methode möglicherweise nicht narrensicher ist, bietet sie im Vergleich zum ursprünglichen Seed-basierten Ansatz eine deutliche Verbesserung der Sicherheit.

Das obige ist der detaillierte Inhalt vonWie kann ich in PHP sicher Zufallszahlen für Anwendungen wie das Zurücksetzen von Passwörtern generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn