PHP password_hash()-Funktion

PHP 密码散列算法PHP-Passwort-Hashing-Algorithmen

Die Funktion password_hash() wird verwendet, um einen Hash eines Passworts zu erstellen.

PHP-Versionsanforderungen: PHP 5 >= 5.5.0, PHP 7

Syntax

string password_hash ( string $password , int $algo [, array $options ] )

password_hash() verwendet einen ausreichend starken Einweg-Hashing-Algorithmus, um einen Hash eines Passworts zu erstellen. password_hash() ist mit crypt() kompatibel. Daher können mit crypt() erstellte Passwort-Hashes auch mit password_hash() verwendet werden.

Derzeit unterstützte Algorithmen:

  • PASSWORD_DEFAULT- Verwendet den bcrypt-Algorithmus (Standard in PHP 5.5.0). Beachten Sie, dass sich diese Konstante ändern wird, wenn PHP neuere, stärkere Algorithmen hinzufügt. Daher kann sich die Länge des mit dieser Konstante erzeugten Ergebnisses in Zukunft ändern. Daher kann die Spalte in der Datenbank, die das Ergebnis speichert, 60 Zeichen überschreiten (vorzugsweise 255 Zeichen).
  • PASSWORD_BCRYPT- Verwenden SieCRYPT_BLOWFISHden Algorithmus, um einen Hash zu erstellen. Dadurch wird ein Hash erzeugt, der mit der Verwendung des Präfixes "$2y$" kompatibel ist.crypt()Das Ergebnis ist eine 60-stellige Zeichenfolge oder FALSE bei einem Fehler.FALSE。
  • PASSWORD_ARGON2I- Verwenden Sie den Argon2-Hashing-Algorithmus, um einen Hash zu erstellen.

Von PASSWORD_BCRYPT unterstützte Optionen:

  • salt (string) - Manuell ein Salt zum Hashen des Passworts angeben. Dadurch wird die automatische Generierung eines Salts vermieden.

    Wenn dieser Wert weggelassen wird, generiert password_hash() automatisch ein zufälliges Salt für jeden Passwort-Hash. Dies ist ein beabsichtigter Betriebsmodus.

    Hinweis: Die salt-Option ist seit PHP 7.0.0 veraltet. Es ist jetzt besser, einfach das standardmäßig generierte Salt zu verwenden.

  • cost (integer) - Repräsentiert die vom Algorithmus verwendeten Kosten. Beispiele für Kostenwerte finden Sie auf der crypt()-Seite.

    Wenn weggelassen, ist der Standardwert 10. Diese Kosten sind ein guter Ausgangswert, aber Sie können diesen Wert je nach Ihrer Hardware erhöhen.

Von PASSWORD_ARGON2I unterstützte Optionen:

  • memory_cost (integer) - Der maximale Speicher (in Bytes), der bei der Berechnung des Argon2-Hashes verwendet werden soll. Standardwert:PASSWORD_ARGON2_DEFAULT_MEMORY_COST。

  • time_cost (integer) - Die maximale Zeit, die bei der Berechnung des Argon2-Hashes verwendet werden soll. Standardwert:PASSWORD_ARGON2_DEFAULT_TIME_COST。

  • threads (integer) - Die maximale Anzahl an Threads, die bei der Berechnung des Argon2-Hashes verwendet werden sollen. Standardwert:PASSWORD_ARGON2_DEFAULT_THREADS。

Parameter description:

  • password: Ein von password_hash() erstellter Hash-Wert.

  • algo: Eine Passwort-Algorithmus-Konstante, die verwendet wird, um den Algorithmus beim Hashen des Passworts anzugeben.

  • options: Ein assoziatives Array, das Optionen enthält. Derzeit werden zwei Optionen unterstützt: salt, das Salz (Störzeichenfolge), das beim Hashen des Passworts hinzugefügt wird, und cost, das verwendet wird, um die Anzahl der rekursiven Ebenen des Algorithmus anzugeben. Beispiele für diese beiden Werte finden sich auf der crypt()-Seite.

    Wenn sie weggelassen werden, werden ein zufälliges Salz und die Standardkosten verwendet.

Rückgabewert

Gibt das gehashte Passwort zurück oder FALSE im Fehlerfall.

Beispiele

Beispiel 1

<?php /** * Wir möchten das Passwort mit dem Standardalgorithmus hashen. * Derzeit BCRYPT, was ein Ergebnis mit 60 Zeichen erzeugt. * * Bitte beachten Sie, dass sich der Standardalgorithmus im Laufe der Zeit ändern kann, * sodass der benötigte Speicherplatz 60 Zeichen überschreiten sollte (255 ist in Ordnung).*/ echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT); ?>

Die Ausgabe ist:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Beispiel 2

<?php /** * In diesem Fall erhöhen wir die Kosten für BCRYPT auf 12. * Beachten Sie, dass wir umgestellt haben, wodurch immer 60 Zeichen erzeugt werden.*/ $options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>

Die Ausgabe ist:

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

Beispiel 3

Beispiel für das manuelle Festlegen des Salz-Werts

<?php /** * Beachten Sie, dass das Salz hier zufällig generiert wird. * Verwenden Sie niemals ein festes Salz oder ein Salz, das nicht zufällig generiert wurde. * * In den meisten Fällen können Sie password_hash automatisch ein zufälliges Salz für Sie generieren lassen.*/ $options = [ 'cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>

Die Ausgabe ist:

$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.

Beispiel 4

Beispiel für password_hash() zum Ermitteln der optimalen Kosten

<?php /** * Dieses Beispiel führt einen Benchmark für den Server durch, um zu testen, welchen Kostenwert der Server verarbeiten kann. * Sie können den höchsten Wert festlegen, ohne den Server deutlich zu verlangsamen. * 8-10 ist eine gute Grundlage; je höher, desto besser, wenn der Server schnell genug ist. * Der folgende Code zielt auf ≤ 50 milliseconds ab, * geeignet für Systeme, die interaktive Anmeldungen verarbeiten.*/ $timeTarget = 0.05; //50 milliseconds $cost = 8; do { $cost++; $start = microtime(true); password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]); $end = microtime(true); } while (($end - $start) < $timeTarget); echo "Geeigneter Kostenwert gefunden: " . $cost; ?>

Die Ausgabe ist:

Appropriate Cost Found: 10

Beispiel 5

Beispiel mit Argon2:

<?php echo 'Argon2-Hash: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I); ?>

Die Ausgabe ist:

Argon2 hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0

PHP 密码散列算法PHP-Passwort-Hashing-Algorithmen

Andere Erweiterungen