


Warum schlägt die PHP-Passwortüberprüfung fehl, wenn der Passwort-Hash nicht übereinstimmt?
PHP passwort_hash(), passwort_verify()
In Ihrem Registrierungsskript hashen Sie das Passwort korrekt mit passwort_hash() und speichern es in die Datenbank. Wenn Sie jedoch das Passwort während der Anmeldung mit „password_verify()“ überprüfen, stoßen Sie auf eine Nichtübereinstimmung.
Das von Ihnen bereitgestellte Snippet zeigt, dass das in der Datenbank gespeicherte Passwort gehasht ist (beginnend mit „$2y$10$“). , während das vom Benutzer eingegebene Passwort im Klartext vorliegt (string(1) „1“). Das Problem liegt in der Art und Weise, wie Sie das Passwort aus der Datenbank abrufen.
Im Anmeldeskript rufen Sie die Passwortspalte ohne weitere Verarbeitung direkt aus dem Datenbankergebnis ab. Das gespeicherte Passwort ist jedoch gehasht und muss enthasht werden, bevor es mit dem Klartext-Passwort verglichen werden kann, das der Benutzer mit „password_verify()“ eingegeben hat.
Lösung:
Im Anmeldeskript müssen Sie vor der Verwendung von „password_verify()“ das gespeicherte Hash-Passwort aus der Datenbank abrufen und es dann mithilfe der Funktion „password_hash()“ mit dem Algorithmus „PASSWORD_DEFAULT“ enthashen. Hier ist der korrigierte Code für das Anmeldeskript:
<code class="php">// ...same code as before... $stored_hash = $row['password']; // Retrieve the stored hashed password if (password_verify($pwd, $stored_hash)) { // ...same code as before... }</code>
Diese Änderung stellt sicher, dass das in der Datenbank gespeicherte Passwort ordnungsgemäß enthasht wird, bevor es mit dem vom Benutzer eingegebenen Klartext-Passwort verglichen wird, sodass „password_verify()“ funktioniert richtig.
Das obige ist der detaillierte Inhalt vonWarum schlägt die PHP-Passwortüberprüfung fehl, wenn der Passwort-Hash nicht übereinstimmt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PhparrayShandledatacollectionSeffictionlyusingInedorassociativestruationen;

TheobserverdesignPatternNenableAtomaticnotificationOfDependentObjectSwhenasubjectsSstatechanges.1) itdefinesaon-to-ManyDependencyBetobjects; 2) thesubjectmaintainSalistoBoBserverSandnotifiesthemviaAcommonNection;

$ _Cookieisaphpsuperglobalfor AccessingcookieStbytheBrowser; CookiesAresetusingsetcookie () vor dem Output, Readvia $ _cookie ['name'], aktualisiert Byresending mit den Sekton, mit SCURITYBESTPRACTICING, MIT SECURITYBESTPRACTICICING, MIT SECURITYBESTPRECTICE

B-treeIndexesarebestFormOstPhpapplications, als Theysupportequality und RangeQueries, Sorting und saridealforcolumnSusedinwhere, Join, ORORDBYCLAUSS;

Auf öffentliche Mitglieder können nach Belieben zugegriffen werden. 2. private Mitglieder können nur innerhalb der Klasse zugegriffen werden. 3.. Geschützte Mitglieder können in Klassen und Unterklassen zugegriffen werden. 4. Die rationale Verwendung kann die Sicherheit und die Wartbarkeit der Code verbessern.

Usedate ('y-m-dh: i: s') witdate_default_timezone_set () togetcurrentDateAnDimeInphp, um sicherzustellen, dass AccurateresultsbySettingThedEredTimeZonelike'america/New_York'beForecallingDate () () sicherstellt.

UsedatetimefordateInphp: createwitheNewdatetime (), formatwithFormat (), modifyviaadd () modify (), setTimezoneswithDatetimezone und CompareUSUKTERSORDERSordiff () Togetintervals.

Mithilfe von mySQLI-objektorientierter Methode: Erstellen Sie eine Verbindung, Vorprozess-Update-Anweisungen, binden Sie Parameter, führen Sie die Ergebnisse aus und überprüfen Sie sie schließlich die Ressource. 2. Mithilfe der MySQLI -Prozedurmethode: Verbindung mit der Datenbank über Funktionen herstellen, Anweisungen vorbereiten, Parameter binden, Aktualisierungen durchführen und die Verbindung nach Verarbeitungsfehlern schließen. 3.. Verwenden Sie PDO: Stellen Sie eine Verbindung zur Datenbank über PDO ein, setzen Sie den Ausnahmemodus, stellen Sie SQL vor, binden Sie Parameter, führen Sie Aktualisierungen durch, verwenden Sie Try-Catch, um Ausnahmen zu verarbeiten und schließlich Ressourcen zu veröffentlichen. Verwenden Sie immer Vorverarbeitungsanweisungen, um die SQL -Injektion zu verhindern, die Benutzereingabe zu überprüfen und Verbindungen in der Zeit zu schließen.
