⊗ppPmAuHFP 426 of 447 menu

Функция password_hash

Tatsächlich gelten die Funktion md5 und das Salzen von Passwörtern damit als veraltet. Wir haben sie studiert, damit Sie den weiteren Stoff verstehen und weil Sie ihr bei der Arbeit mit Fremdprojekten begegnen könnten.

Es gibt eine fortschrittlichere Methode, um ein gesalzenes Passwort zu erhalten. Dafür wird die Funktion password_hash verwendet. Ihr erster Parameter ist ein String, der zweite - der Verschlüsselungsalgorithmus (dazu später mehr), und sie gibt den Hash dieses Strings zusammen mit dem Salt zurück.

Versuchen Sie, diesen Code mehrmals auszuführen:

<?php echo password_hash('12345', PASSWORD_DEFAULT); ?>

Sie werden jedes Mal ein anderes Ergebnis erhalten, und in diesem Ergebnis wird der erste Teil der Zeichenkette das Salt sein, und der zweite Teil - das gesalzene Passwort.

Angenommen, wir haben einen Hash, der von der Funktion password_hash erzeugt wurde, und ein beliebiges Passwort. Um zu überprüfen, ob es sich um den Hash dieses Passworts handelt oder nicht, sollte die Funktion password_verify verwendet werden. - ihr erster Parameter ist das Passwort, der zweite - der Hash, und sie gibt true oder false zurück.

Sehen wir uns ein Beispiel an:

<?php $password = '12345'; // Passwort $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // Hash if (password_verify($password, $hash)) { // Hash von diesem Passwort } else { // Hash nicht von diesem Passwort } ?>

Was bringt uns das in der Praxis: Wir müssen kein separates Feld in der Datenbank für die Speicherung des Salts anlegen, uns nicht mit der Generierung dieses Salts herumschlagen - PHP erledigt alles für uns!

Das bedeutet, dass wir in der Datenbank im Feld password das gesalzene Passwort zusammen mit seinem Salt speichern werden. Dabei wird das gehashte Passwort eine größere Länge haben. Daher müssen wir in der Datenbank die Größe des Passwortfelds anpassen und sie auf 60 Zeichen setzen.

Korrigieren wir nun den Registrierungscode. Hier ist, was wir aktuell haben:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // Länge des Salts for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // Zeichen aus ASCII-Tabelle } return $salt; } $salt = generateSalt(); // Salt $password = md5($salt . $_POST['password']); // Passwort in einen gesalzenen Hash umwandeln ?>

Mit password_hash können wir dies auf Folgendes reduzieren:

<?php $password = password_hash($_POST['password'], PASSWORD_DEFAULT); ?>

Auf ähnliche Weise wird der Autorisierungscode angepasst:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // Benutzer per Login abrufen $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // gesalzenes Passwort aus der DB // Überprüfen, ob der Hash aus der Datenbank mit dem eingegebenen Passwort übereinstimmt if (password_verify($_POST['password'], $hash)) { // alles ok, autorisieren... } else { // Passwort stimmt nicht, Meldung ausgeben } } else { // Benutzer mit diesem Login existiert nicht, Meldung ausgeben } ?>

Passen Sie Ihre Anmeldung und Registrierung an die neuen gelernten Funktionen an.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen