Kernpunkte
password_hash()
für Hashing-Passwörter, password_verify()
für die Überprüfung von Passwörtern mit ihren Hash-Werten, password_needs_rehash()
für die Überprüfung, ob Passwörter erneut wiedergegeben werden müssen, password_get_info()
Wird verwendet, um den Namen des Hash -Algorithmus und verschiedene Optionen im Hashing -Prozess zurückzugeben. password_hash()
-Funktion übergeben. password_compat
verwenden, die die API emuliert und sich automatisch selbst deaktiviert, nachdem die PHP -Version auf 5.5 aktualisiert wurde. Die Verwendung von BCrypt wird derzeit als das beste Passwort -Hashing -Praxis anerkannt, aber viele Entwickler verwenden immer noch ältere und schwächere Algorithmen wie MD5 und SHA1. Einige Entwickler verwenden beim Hashing nicht einmal Salz. Die neue Hash -API in PHP 5.5 soll Bcrypt aufmerksam machen und gleichzeitig ihre Komplexität verstecken. In diesem Artikel werde ich die Grundlagen der Verwendung der PHP New Hash API behandeln. Die neue Passwort -Hash -API enthält vier einfache Funktionen:
password_hash()
- Wird verwendet, um das Passwort zu haben. password_verify()
- Wird verwendet, um Passwörter basierend auf ihrem Hash -Wert zu überprüfen. password_needs_rehash()
- Wird beim Wiederaufnehmen des Passworts verwendet. password_get_info()
- Gibt den Namen des Hashing -Algorithmus und die verschiedenen Optionen zurück, die im Hashing -Prozess verwendet werden. password_hash()
Obwohl die crypt()
-Funktion sicher ist, denken viele Menschen, dass sie zu komplex und fehleranfällig ist. Dann verwenden einige Entwickler schwache Salz und schwache Algorithmen, um Hashes zu erzeugen, wie:
<?php $hash = md5($password . $salt); // 可行,但危险
Die password_hash()
-Funktion vereinfacht jedoch unsere Arbeit und unser Code kann sicher gehalten werden. Wenn Sie ein Hash -Passwort benötigen, geben Sie es einfach der Funktion an, und es gibt einen Hash -Wert zurück, der in der Datenbank gespeichert werden kann.
<?php $hash = md5($password . $salt); // 可行,但危险
Das ist es! Der erste Parameter ist die Kennwortzeichenfolge, und der zweite Parameter gibt den Algorithmus an, der zum Generieren des Hash angewendet wird. Der aktuelle Standardalgorithmus ist Bcrypt, aber manchmal kann es in Zukunft einen leistungsstärkeren Algorithmus als Standardalgorithmus hinzufügen und größere Zeichenfolgen erzeugen. Wenn Sie in Ihrem Projekt PASSWORD_DEFAULT
verwenden, speichern Sie den Hash in einer Spalte mit einer Kapazität von mehr als 60 Zeichen. Das Einstellen der Spaltengröße auf 255 kann eine gute Wahl sein. Sie können auch PASSWORD_BCRYPT
als zweiter Parameter verwenden. In diesem Fall ist das Ergebnis immer 60 Zeichen lang. Hier ist wichtig, dass Sie keine Salzwert- oder Kostenparameter bereitstellen müssen. Die neue API wird all dies für Sie übernehmen. Salz ist Teil des Hashs, also müssen Sie es nicht separat aufbewahren. Wenn Sie Ihr eigenes Salz (oder Kosten) bereitstellen möchten, können Sie dies tun, indem Sie einen dritten Parameter (ein Optionsarray) an die Funktion übergeben.
<?php $hash = password_hash($password, PASSWORD_DEFAULT);
Auf diese Weise können Sie immer die neuesten Sicherheitsmaßnahmen anwenden. Wenn PHP später beschließt, einen leistungsstärkeren Hashing -Algorithmus zu implementieren, kann Ihr Code ihn nutzen.
password_verify()
Jetzt, da Sie gelernt haben, wie man mit der neuen API Hashes generiert, sehen wir sehen, wie Sie Ihr Passwort überprüfen. Denken Sie daran, dass Sie den Hash in der Datenbank speichern, aber Sie erhalten ein einfaches Textkennwort, wenn sich der Benutzer anmeldet. Die password_verify()
-Funktion nimmt ein einfaches Textkennwort und eine Hash -Zeichenfolge als ihre beiden Parameter. Gibt true zurück, wenn der Hash mit dem angegebenen Passwort übereinstimmt.
<?php $options = [ 'salt' => custom_function_for_salt(), //编写您自己的代码以生成合适的盐 'cost' => 12 // 默认成本为 10 ]; $hash = password_hash($password, PASSWORD_DEFAULT, $options);
Denken Sie daran, dass Salz Teil des Hash -Passworts ist, weshalb wir es hier nicht getrennt angeben.
password_needs_rehash()
password_needs_rehash()
hilft zu überprüfen, ob ein bestimmter Hash einen bestimmten Algorithmus implementiert und beim Erstellen bestimmte Optionen (z. B. Kosten und Salz) verwendet.
<?php if (password_verify($password, $hash)) { // 成功! } else { // 无效的凭据 }
Denken Sie daran, dass Sie dies tun müssen, wenn ein Benutzer versucht, sich auf Ihrer Website anzumelden, dies nur der Zeitpunkt ist, in dem Sie auf Ihr Klartextkennwort zugreifen können.
password_get_info()
password_get_info()
akzeptiert einen Hash und gibt ein assoziatives Array mit drei Elementen zurück:
algo
- eine Konstante, die einen bestimmten Algorithmus identifiziert algoName
- Der Name des verwendeten Algorithmus options
- Verschiedene Optionen, die beim Generieren von Hash Schlussfolgerung
Die neue Kennwort -Hash -API ist einfacher zu verwenden als die Funktion crypt()
. Wenn Ihre Website derzeit auf PHP 5.5 ausgeführt wird, empfehle ich dringend, die neue Hash -API zu verwenden. Diejenigen, die PHP 5.3.7 (oder später) verwenden, können eine Bibliothek namens password_compat
verwenden, die die API emuliert und sich automatisch selbst deaktiviert, nachdem die PHP -Version auf 5.5 aktualisiert wurde.
PHP 5.5 Kennwort Hash API FAQ (FAQ)
PHP 5.5 Kennwort -Hash -API ist eine Funktion in PHP 5.5 und später die Entwickler eine einfache Möglichkeit, Hash und Passwörter auf sichere Weise zu überprüfen. Es ist wichtig, weil es hilft, sensible Benutzerdaten zu schützen. Wenn die Datenbank gehackt wird, sind Hash -Kennwörter schwerer zu knacken als Klartextkennwörter. Die API verwendet standardmäßig die leistungsstarke Hash -Funktion BCrypt und behandelt automatisch die Erzeugung von Salzwerten, wodurch es den Entwicklern die Implementierung der sicheren Kennwortverarbeitung erleichtert.
password_hash
Wie funktioniert die Funktion? password_hash
ist Teil der PHP 5.5 -Passwort -Hash -API. Es empfängt ein einfaches Textkennwort und einen Hash -Algorithmus als Eingabe und gibt ein Hash -Passwort zurück. Die Funktion generiert automatisch und wendet vor dem Hashing einen zufälligen Salzwert auf das Passwort an. Dieser Salzwert ist im zurückgegebenen Hash enthalten, sodass es nicht erforderlich ist, ihn separat zu speichern.
password_verify
Was ist der Zweck der Funktion? password_verify
Funktion wird verwendet, um Kennwörter basierend auf Hash -Passwörtern zu überprüfen. Es empfängt ein einfaches Textkennwort und ein Hash -Passwort als Eingabe. Diese Funktion extrahiert Salzwerte und Hashing -Algorithmen aus dem Hashed -Kennwort, wendet sie auf das Klartextkennwort an und vergleicht dann die Ergebnisse mit dem ursprünglichen Hashed -Kennwort. Wenn es übereinstimmt, gibt die Funktion true zurück und gibt an, dass das Kennwort korrekt ist.
PHP 5.5 Kennwort -Hash -API wird als sehr sicher angesehen. Es verwendet standardmäßig den Bcrypt -Hashing -Algorithmus, was eine leistungsstarke Hashing -Funktion ist. Die API generiert automatisch einen zufälligen Salzwert für jedes Passwort, wodurch Regenbogentabellenangriffe verhindern. Wie bei allen Sicherheitsmaßnahmen ist es jedoch nicht narrensicher und sollte als Teil einer umfassenden Sicherheitsrichtlinie verwendet werden.
password_hash
benutzerdefiniertes Salz verwenden? Ja, Sie können in der Funktion password_hash
benutzerdefiniertes Salz verwenden, dies wird jedoch nicht empfohlen. Diese Funktion generiert automatisch einen zufälligen Salzwert für jedes Kennwort, was normalerweise sicherer als benutzerdefiniertes Salz ist. Wenn Sie ein benutzerdefiniertes Salz verwenden, sollte es eine zufällige Zeichenfolge von mindestens 22 Zeichen sein.
password_hash
Was sind die Kostenparameter in der Funktion? password_hash
Die Kostenparameter in der Funktion bestimmen die Rechenkosten des Hash. Höhere Kosten machen Hash sicherer, aber auch langsamere Berechnungen. Die Standardkosten betragen 10, was für die meisten Anwendungen ein gutes Gleichgewicht zwischen Sicherheit und Leistung ist.
Sie können die Funktion password_needs_rehash
verwenden, um zu prüfen, ob das Hash -Kennwort neu aufgehoben werden muss. Diese Funktion empfängt Hash -Passwort, Hash -Algorithmus und optionale Kosten als Eingabe. Wenn das Hash -Passwort mit einem anderen Algorithmus oder einer anderen Kosten erstellt wird, gibt es True zurück, was darauf hinweist, dass es wieder aufgewendet werden sollte.
PHP 5.5 Kennwort -Hash -API ist nur in PHP 5.5 und später verfügbar. Es gibt jedoch eine Kompatibilitätsbibliothek, die die gleiche Funktionalität für PHP 5.3.7 und höher bietet.
PASSWORD_DEFAULT
habe und dann der Standardalgorithmus in zukünftigen Versionen von PHP ändert? Wenn Sie das Kennwort mithilfe der PASSWORD_DEFAULT
-Konstante und dann des Standardalgorithmus in zukünftigen Versionen von PHP -Änderungen haben, funktioniert die Funktion password_hash
wie erwartet weiter. Das Hashed -Kennwort enthält Informationen zum verwendeten Algorithmus, sodass die password_verify
-Funktion das Kennwort weiterhin korrekt überprüfen kann.
Ja, Sie können die PHP 5.5-Passwort-Hash-API mit Nicht-ASCII-Passwörtern verwenden. Die Funktionen password_hash
und password_verify
verwenden Binärdaten, sodass sie Passwörter für jeden Zeichen verarbeiten können. Sie sollten jedoch beachten, dass verschiedene Systeme möglicherweise nicht-ASCII-Zeichen unterschiedlich umgehen. Daher ist es eine gute Idee, sie zu normalisieren, bevor Sie das Passwort haben.
Das obige ist der detaillierte Inhalt vonHashing -Passwörter mit der PHP 5.5 -Passwort -Hashing -API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!