⊗ppPmAuHFP 426 of 447 menu

Funktionen password_hash

Egentligen anses funktionen md5 och saltning av lösenord med dess hjälp vara föråldrad. Vi studerade den så att du skulle förstå det vidare materialet, och även för att du kan stöta på det när du jobbar med andras projekt.

Det finns ett mer perfekt sätt att få ett saltat lösenord. För detta används funktionen password_hash. Den tar som första parameter en sträng, och som andra - krypteringsalgoritmen (mer om det senare), och returnerar ett hash av denna sträng tillsammans med saltet.

Försök att köra denna kod flera gånger:

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

Du kommer att få ett annat resultat varje gång och i detta resultat kommer den första delen av strängen att vara saltet, och den andra delen - det saltade lösenordet.

Låt oss säga att vi har ett hash, erhållet från funktionen password_hash och något lösenord. För att kontrollera om detta är hash för detta lösenord eller inte, bör funktionen password_verify användas - den tar som första parameter lösenordet, och som andra - hashet, och returnerar true eller false.

Låt oss titta på ett exempel:

<?php $password = '12345'; // lösenord $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash från detta lösenord } else { // hash inte från detta lösenord } ?>

Vad ger detta oss i praktiken: vi behöver inte skapa ett separat fält i databasen för att lagra salt, inte bry oss om att generera detta salt - PHP gör allt åt oss!

Det kommer alltså att bli så att i databasen i fältet password kommer vi att lagra det saltade lösenordet tillsammans med dess salt. Samtidigt kommer det hashade lösenordet att ha en större längd. Därför måste vi i databasen korrigera storleken på lösenordsfältet och sätta den till 60 tecken.

Låt oss nu rätta till registreringskoden. Här är vad vi har nu:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // saltlängd for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // tecken från ASCII-tabellen } return $salt; } $salt = generateSalt(); // salt $password = md5($salt . $_POST['password']); // omvandlar lösenord till saltat hash ?>

Med hjälp av password_hash kan vi reducera detta till:

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

På samma sätt kommer inloggningskoden att justeras:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // hämtar användaren via inloggningen $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // saltat lösenord från databasen // Kontrollerar överensstämmelsen mellan hashet från databasen och det inmatade lösenordet if (password_verify($_POST['password'], $hash)) { // allt ok, loggar in... } else { // lösenordet matchade inte, visa meddelande } } else { // det finns ingen användare med detta inloggningsnamn, visa meddelande } ?>

Ändra din inloggning och registrering till de nya inlärda funktionerna.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa