⊗ppPmAuHFP 426 of 447 menu

Funksjonen password_hash

Faktisk anses funksjonen md5 og salting av passord med den som foreldet. Vi studerte den for at du skal forstå det videre stoffet, og også fordi du kan støte på dette når du jobber med andres prosjekter.

Det finnes en mer avansert måte å få et saltet passord. For dette brukes funksjonen password_hash. Den første parameteren tar den imot en streng, og den andre - krypteringsalgoritmen (mer om det senere), og returnerer en hash av denne strengen sammen med saltet.

Prøv å kjøre denne koden flere ganger:

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

Du vil hver gang få et annet resultat og i dette resultatet vil den første delen av strengen være saltet, og den andre delen - det saltede passordet.

La oss si at vi har en hash, hentet fra funksjonen password_hash og et eller annet passord. For å sjekke om dette er hashen til dette passordet eller ikke, bor man bruke funksjonen password_verify - den første parameteren tar imot passordet, og den andre - hashen, og returnerer true eller false.

La oss se på et eksempel:

<?php $password = '12345'; // passord $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash fra dette passordet } else { // hash ikke fra dette passordet } ?>

Hva gir dette oss i praksis: vi kan unngå å opprette et eget felt i database for lagring av salt, ikke bry oss med generering av dette saltet - PHP vil gjøre alt for oss!

Det vil si at det vil bli slik at i databasen, i feltet password vil vi lagre det saltede passordet sammen med dets salt. Samtidig vil den hashede passordet ha en større lengde. Derfor bor vi i databasen rette størrelsen på passordfeltet og sette den til 60 tegn.

La oss nå rette koden for registrering. Her er det vi har nå:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // lengde på saltet for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // tegn fra ASCII-tabell } return $salt; } $salt = generateSalt(); // salt $password = md5($salt . $_POST['password']); // gjør om passordet til en saltet hash ?>

Ved hjelp av password_hash kan vi forkorte dette til:

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

På samme måte justeres autorisasjonskoden:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // henter brukeren via loginn $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // saltet passord fra DB // Sjekker samsvar mellom hashen fra databasen og det innsendte passordet if (password_verify($_POST['password'], $hash)) { // alt ok, autoriser... } else { // passordet passet ikke, vis melding } } else { // det finnes ingen bruker med dette loginn, vis melding } ?>

Omgjør din autorisasjon og registrering til de nye studerte funksjonene.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis