English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Grundlagenanleitung

PHP Fortgeschrittene Anleitung

PHP & MySQL

PHP-Referenzhandbuch

Verwendung und Beispiel der PHP-Funktion password_hash()

PHP Passwort-Hash-Algorithmus

Die Funktion password_hash() wird verwendet, um den Hash des 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-Hash-Algorithmus, um den Hash des Passworts zu erstellen. password_hash() ist mit crypt() kompatibel. Daher kann auch der Passwort-Hash, der von crypt() erstellt wird, für password_hash() verwendet werden.

Aktuell unterstützte Algorithmen:

  • PASSWORD_DEFAULT - Verwenden Sie den bcrypt-Algorithmus (PHP 5.5.0 als Standard)      Beachten Sie, dass dieser Konstante mit dem Hinzufügen von PHP aktualisierten, stärkeren Algorithmen ändern wird.      Daher wird die Länge der Ergebnisse durch die Verwendung dieses Konstanten in der Zukunft ändern      Daher kann die Spalte im Datenbank gespeicherten Ergebnisse länger sein60 Zeichen (besser255Zeichen (wahrscheinlich

  • PASSWORD_BCRYPT - Verwenden CRYPT_BLOWFISH der Algorithmus erstellt einen Hash.      Dies ergibt Kompatibilität mit der Verwendung von "$2y$" des crypt().      Das Ergebnis wird sein 6Eine Zeichenkette von 0 Zeichen, oder wird im Fehlerfall zurückgegeben FALSE

  • PASSWORD_ARGON2I - Verwenden Sie Argon2 Der Hash-Algorithmus erstellt einen Hash.

Unterstützte Optionen von PASSWORD_BCRYPT:

  • salt(string) - Manuell den Salzwert (salt) für den Hash des Passworts bereitstellen. Dies verhindert die automatische Generierung des Salzwertes.

    Falls der Wert weggelassen wird, generiert password_hash() automatisch zufällige Salzwerte für jeden Passwort-Hash. Dies ist ein absichtliches Muster.

    Hinweis: Die Salt-Option (salt) wurde von PHP unterstützt. 7.0.0 wurde abgekündigt (deprecated). Es ist besser, einfach den Standard generierten Salzwert zu verwenden.

  • cost (integer) - darstellt den von der Algorithmus verwendeten cost. Auf der crypt()-Seite finden Sie Beispiele für cost-Werte.

    Ohne Angabe ist der Standardwert 10. Dieser cost ist ein guter Ausgangspunkt, aber möglicherweise kann dieser Wert je nach Hardware erhöht werden.

PASSWORD_ARGON2I Unterstützte Optionen:

  • memory_cost (integer) - Argon berechnen2 Maximale Speichergröße beim Hashen (in Bytes byte). Standardwert: PASSWORD_ARGON2_DEFAULT_MEMORY_COST

  • time_cost (integer) - Argon berechnen2 Maximale Zeit beim Hashen. Standardwert: PASSWORD_ARGON2_DEFAULT_TIME_COST

  • threads (integer) - Argon berechnen2 Maximale Anzahl der Threads beim Hashen. Standardwert: PASSWORD_ARGON2_DEFAULT_THREADS

Parameterbeschreibung:

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

  • algo: Ein Passwortalgorithmuskonstante, die beim Hashen des Passworts verwendet wird.

  • options: Ein assoziatives Array, das Optionen enthält. Derzeit werden zwei Optionen unterstützt: salt, das als Salz (Störtext) beim Hashen des Passworts hinzugefügt wird, und cost, das zur Angabe der Anzahl der rekursiven Ebenen des Algorithmus dient. Beispiele für diese Werte finden Sie auf der crypt()-Seite.

    Ohne Angabe wird ein zufälliger Salzwert mit dem Standard cost verwendet.

Rückgabewert

Rückgabe des gehashten Passworts oder FALSE im Falle eines Fehlschlags.

Online-Beispiel

<?php
/**
 * Wir möchten den Standardalgorithmus zur Verschlüsselung von Passwörtern verwenden
 * Derzeit ist es 60 Zeichen Ergebnis.
 *
 * Bitte beachten Sie, dass die Standardalgorithmen im Laufe der Zeit ändern können,
 * Also muss genügend Speicherplatz verfügbar sein, um 60 Zeichen (255Zeichen (Wort nicht falsch)
 */
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
?>

Die Ausgabe ist:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
<?php
/**
 * In diesem Fall haben wir den 12
 * Beachten Sie, dass wir auf einen umgeschaltet haben, der immer 60 Zeichen.
 */
$options = [
    'cost' => 12,
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
?>

Die Ausgabe ist:

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

Beispiel 3

Beispiel für die manuelle Einstellung eines Salzwerts

<?php
/**
 * Beachten Sie, dass der Salzwert hier zufällig generiert wird.
 * Niemals eine festgelegte Salzwert verwenden oder einen nicht zufällig generierten Salzwert.
 *
 * In den meisten Fällen kann password_hash generate Ihnen automatisch zufällige Salzwerte 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

Passwort_hash() - Beispiel zur Suche nach der besten cost

<?php
/**
 * Dieser Beispielcode führt einen Benchmark durch, um zu überprüfen, wie hoch der cost
 * Man kann den höchsten Wert einstellen, ohne den Server merklich zu verlangsamen
 * 8-10 Es ist ein guter Ausgangspunkt, und bei schnellen Servern ist mehr besser.
 * Der folgende Code zielt darauf ab, dass 50 Millisekunden,
 * Eignet sich für Interaktionsanmeldungen des Systems.
 */
$timeTarget = 0.05; // 50 Millisekunden 
 
$cost = 8;
do {
    $cost++;
    $start = microtime(true);
    password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);
    $end = microtime(true);
} while (($end - $start) < $timeTarget);
 
echo "Geeigneter Kostenbetrag gefunden: " . $cost;
?>

Die Ausgabe ist:

Geeigneter Kostenbetrag gefunden: 10

Beispiel 5

Verwenden Sie Argon2 Beispiel:

<?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 Passwort-Hash-Algorithmus