Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erzeugen die Funktionen „password_hash()' und „password_verify()' in PHP unterschiedliche Ergebnisse?

Warum erzeugen die Funktionen „password_hash()' und „password_verify()' in PHP unterschiedliche Ergebnisse?

Linda Hamilton
Linda HamiltonOriginal
2024-10-21 07:03:301034Durchsuche

Why Do password_hash() and password_verify() Functions in PHP Produce Different Results?

Diskrepanz bei der Passwortüberprüfung in den PHP-Funktionen „password_hash()“ und „password_verify()“

In PHP sind dies die Funktionen „password_hash()“ und „password_verify()“. Wird häufig zur sicheren Handhabung und Überprüfung von Benutzerkennwörtern verwendet. Bestimmte Szenarien können jedoch zu unerwarteten Diskrepanzen beim Passwortabgleich führen.

Problemstellung

Sie haben eine Diskrepanz beim Passwortabgleich festgestellt, als Sie „password_hash()“ zum Verschlüsseln von Passwörtern und verwendet haben passwort_verify() um sie zu überprüfen. Sie haben festgestellt, dass das Ergebnis von „password_verify()“ nicht mit dem ursprünglichen unverschlüsselten Passwort übereinstimmt.

Verstehen der Diskrepanz

Die Diskrepanz entsteht aufgrund der Natur der Hashing-Algorithmen . Beim Hashing wird eine reine Texteingabe in eine Ausgabe fester Länge (sogenannter Hash) umgewandelt, die eindeutig und unvorhersehbar ist. Dieser Prozess ist irreversibel, was bedeutet, dass es rechnerisch nicht möglich ist, die ursprüngliche Eingabe aus dem Hash abzurufen.

Wenn Sie „password_hash()“ zum Verschlüsseln eines Passworts verwenden, wird mithilfe eines bcrypt-Algorithmus ein Hash generiert. Dieser verschlüsselte Hash wird dann in der Datenbank gespeichert. Wenn ein Benutzer versucht, sich anzumelden, wird das bereitgestellte Passwort mithilfe von „password_hash()“ erneut gehasht und mit dem gespeicherten Hash verglichen.

Behebung der Diskrepanz

Um sicherzustellen, dass das Passwort korrekt ist Bei der Überprüfung ist es wichtig, denselben Algorithmus und dieselbe Konfiguration zu verwenden, die bei der ersten Hashung des Passworts verwendet wurden. Hier sind die Schritte, die Sie unternehmen müssen:

  1. Algorithmus und Konfiguration überprüfen: Bestätigen Sie, dass der in „password_hash()“ in den Registrierungs- und Anmeldeskripten verwendete Algorithmus mit dem Algorithmus übereinstimmt, der dem gespeicherten Passwort zugeordnet ist. Standardmäßig verwendet „password_hash()“ bcrypt, aber Sie können andere Algorithmen angeben, indem Sie den entsprechenden Kostenfaktor angeben.
<code class="php">$password = password_hash($pwd, PASSWORD_DEFAULT); // Using default bcrypt algorithm</code>
  1. Konsistente Hashing-Parameter: Falls ja Passen Sie die Hashing-Parameter wie den Kostenfaktor oder den Salt an, um sicherzustellen, dass sie sowohl im Registrierungs- als auch im Anmeldeskript konsistent sind. Jede Variation dieser Parameter kann zu unterschiedlichen Hashes führen, selbst für dasselbe eingegebene Passwort.
  2. Verwenden Sie sichere Vergleiche: Vermeiden Sie bei der Verwendung von „password_verify()“ zum Vergleichen von Passwörtern die Verwendung von Gleichheitsvergleichen (== oder ===). Verwenden Sie stattdessen die Funktion „password_verify()“, die speziell für diesen Zweck entwickelt wurde, da sie Timing-Angriffe bewältigen kann, die möglicherweise Passwortmuster aufdecken könnten.
<code class="php">if (password_verify($pwd, $password)) {
    // Password matches
}</code>
  1. Erwägen Sie vorbereitete Aussagen: Um SQL-Injection-Angriffe zu verhindern, sollten Sie beim Abfragen der Datenbank zum Abrufen des gehashten Passworts vorbereitete Anweisungen verwenden.

Durch Befolgen dieser Schritte können Sie sicherstellen, dass die Funktionen „password_hash()“ und „password_verify()“ funktionieren korrekt und sorgt für eine zuverlässige und sichere Passwortverwaltung und -überprüfung.

Das obige ist der detaillierte Inhalt vonWarum erzeugen die Funktionen „password_hash()' und „password_verify()' in PHP unterschiedliche Ergebnisse?. 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