Die Funktion „password_hash()“ wird verwendet, um einen Hash des Passworts zu erstellen.
Anforderungen an die PHP-Version: PHP 5 >= 5.5.0, PHP 7
string passwort_hash ( string $password , int $algo [, array $options ] )
passwort_hash() erstellt einen Hash des Passworts mithilfe eines ausreichend starken Einweg-Hashing-Algorithmus. passwort_hash() ist mit crypt() kompatibel. Daher können von crypt() erstellte Passwort-Hashes auch mit passwort_hash() verwendet werden.
Derzeit unterstützte Algorithmen:
PASSWORD_DEFAULT
– Bcrypt-Algorithmus verwenden (Standard in PHP 5.5.0). Beachten Sie, dass sich diese Konstante ändert, wenn PHP neuere, leistungsfähigere Algorithmen hinzufügt. Daher wird sich die Länge der mit dieser Konstante generierten Ergebnisse in Zukunft ändern. Daher kann die Spalte in der Datenbank, in der die Ergebnisse gespeichert werden, mehr als 60 Zeichen (vorzugsweise 255 Zeichen) umfassen.
PASSWORD_BCRYPT
– Erstellt einen Hash mithilfe des CRYPT_BLOWFISH
-Algorithmus. Dies führt zu einem crypt(), das mit „$2y$“ kompatibel ist. Das Ergebnis ist eine 60-stellige Zeichenfolge oder bei einem Fehler FALSE
.
PASSWORD_ARGON2I
– Erstellt einen Hash mithilfe des Argon2-Hashing-Algorithmus.
Von PASSWORD_BCRYPT unterstützte Optionen:
salt(string) – Geben Sie manuell einen Salt-Wert für das Hashing des Passworts an. Dadurch wird eine automatische Salzbildung vermieden.
Wenn dieser Wert weggelassen wird, generiert „password_hash()“ automatisch einen zufälligen Salt-Wert für jeden Passwort-Hash. Diese Funktionsweise ist beabsichtigt.
Hinweis: Die Salt-Option ist ab PHP 7.0.0 veraltet. Im Moment ist es besser, einfach das standardmäßig generierte Salt zu verwenden.
Kosten (Ganzzahl) – Stellt die vom Algorithmus verwendeten Kosten dar. Beispiele für Kostenwerte finden Sie auf der Seite crypt().
Wenn es weggelassen wird, ist der Standardwert 10. Diese Kosten sind unter dem Strich ein gutes Ergebnis, aber Sie können diesen Wert möglicherweise basierend auf Ihrer eigenen Hardware steigern.
Von PASSWORD_ARGON2I unterstützte Optionen:
memory_cost ( Ganzzahl ) – Maximaler Speicher (Einheit: Byte) bei der Berechnung des Argon2-Hashs. Standardwert: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( Ganzzahl ) – Maximale Zeit, die für die Berechnung des Argon2-Hashs aufgewendet wurde. Standardwert: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
threads ( Ganzzahl ) – Die maximale Anzahl von Threads, die bei der Berechnung von Argon2-Hashes verwendet werden sollen. Standardwert: PASSWORD_ARGON2_DEFAULT_THREADS
.
Parameterbeschreibung:
Passwort: ein von passwort_hash() erstellter Hashwert.
Algo: Eine kryptografische Algorithmuskonstante, die den beim Hashing von Passwörtern verwendeten Algorithmus angibt.
Optionen: ein assoziatives Array, das Optionen enthält. Derzeit werden zwei Optionen unterstützt: Salt, der Salt (Interferenzzeichenfolge), der beim Hashing des Passworts hinzugefügt wird, und Cost, der zur Angabe der Anzahl der Ebenen der Algorithmusrekursion verwendet wird. Beispiele für diese beiden Werte finden Sie auf der Seite crypt().
Wenn es weggelassen wird, werden ein zufälliger Salt-Wert und Standardkosten verwendet.
Gibt das gehashte Passwort zurück oder FALSE bei einem Fehler.
Die Ausgabe ist:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Die Ausgabe ist:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Beispiel für die manuelle Einstellung des Salzwerts
<?php /* * * Beachten Sie, dass der Salt-Wert hier zufällig generiert wird. * Verwenden Sie niemals einen festen Salt-Wert oder einen Salt-Wert, der nicht zufällig generiert wird. * * In den meisten Fällen können Sie „password_hash generic“ automatisch einen zufälligen Salt-Wert für Sie generieren lassen */ $optionen = [ ' cost ' => 11 , ' salt ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; passwort_hash ( " rasmuslerdorf " , PASSWORD_BCRYPT , $ options ) ;Die Ausgabe ist:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
Beispiel für Password_hash(), um die besten Kosten zu ermitteln
<?php /* * * Dieses Beispiel führt einen Benchmark-Test auf dem Server durch, um zu testen, wie hoch die Kosten sind, die der Server aushalten kann. * Der höchste Wert kann eingestellt werden, ohne den Server wesentlich zu verlangsamen es ist schnell genug, je höher desto besser. * Das folgende Codeziel ist ≤ 50 Millisekunden (Millisekunden), * geeignet für das System, um die interaktive Anmeldung zu verarbeiten. */ $timeTarget = 0,05 ; // 50 Millisekunden (Millisekunden) $ cost = 8 ; { $ cost ++ ; $ start = microtime ( true ) ;während ( ( $end - $start ) < $timeTarget ) ; echo „ Angemessene Kosten gefunden: “ $cost ; >Die Ausgabe ist:
Angemessene Kosten gefunden: 10
Beispiel mit Argon2:
<?php Echo ' Argon2 hash : ' . passwort_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ;Die Ausgabe ist:
Argon2-Hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0