⊗ppPmAuHFP 426 of 447 menu

Funcția password_hash

De fapt, funcția md5 și sărarea parolei cu ajutorul ei este considerată învechită. Am studiat-o, pentru să înțelegeți materialul ulterior, și, de asemenea, pentru că ați putea da peste ea, lucrând la proiecte străine.

Există o metodă mai avansată de a obține o parolă sărată. Pentru aceasta se folosește funcția password_hash. Primul parametru îl primește șirul, iar al doilea - algoritmul de criptare (despre el mai târziu), și returnează hash-ul acestui șir împreună cu sarea.

Încercați să rulați de câteva ori acest cod:

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

De fiecare dată veți obține un rezultat diferit și în acest rezultat prima parte a șirului va fi sarea, iar a doua parte - parola sărată.

Să presupunem că avem un hash, obținut cu funcția password_hash și o anumită parolă. Pentru a verifica dacă este hash-ul acestei parole sau nu, trebuie să folosim funcția password_verify - primul parametru îl primește parola, iar al doilea - hash-ul, și returnează true sau false.

Să vedem un exemplu:

<?php $password = '12345'; // parola $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash-ul if (password_verify($password, $hash)) { // hash-ul de la această parolă } else { // hash-ul nu este de la această parolă } ?>

Ce ne oferă asta în practică: putem să nu creăm în baza de date un câmp separat pentru stocarea sării, să nu ne necăjim cu generarea acestei sări - PHP va face totul pentru noi!

Adică, se va dovedi că în baza de date în câmpul password vom stoca parola sărată împreună cu sarea ei. În același timp, parola hasuită va avea o lungime mai mare. De aceea în baza de date trebuie să corectăm dimensiunea câmpului pentru parolă și să o setăm la 60 de caractere.

Acum să corectăm codul de înregistrare. Iată ce avem acum:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // lungimea sării for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // caracter din ASCII-table } return $salt; } $salt = generateSalt(); // sarea $password = md5($salt . $_POST['password']); // transformăm parola în hash sărat ?>

Cu ajutorul password_hash vom reduce asta la:

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

În mod similar se va corecta codul de autentificare:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // obținem utilizatorul după login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // parola sărată din BD // Verificăm corespondența hash-ului din baza de date cu parola introdusă if (password_verify($_POST['password'], $hash)) { // totul este în regulă, autentificăm... } else { // parola nu a fost corectă, afișăm mesaj } } else { // nu există utilizator cu acest login, afișăm mesaj } ?>

Reproiectați autentificarea și înregistrarea cu noile funcții studiate.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge