⊗ppPmAuHFP 426 of 447 menu

Funkcija password_hash

U stvari, funkcija md5 i sođenje lozinke uz nju se smatra zastarelim. Proučavali smo je kako biste razumeli dalji materijal, kao i zato što možete naići na ovo, radeći na tuđim projektima.

Postoji savršeniji način da se dobije sođena lozinka. Za to se koristi funkcija password_hash. Kao prvi parametar ona prihvata string, a kao drugi - algoritam šifrovanja (o tome kasnije), i vraća heš tog stringa zajedno sa soli.

Pokušajte nekoliko puta pokrenuti ovaj kod:

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

Svaki put ćete dobiti drugačiji rezultat i u tom rezultatu prvi deo stringa će biti so, a drugi deo - sođena lozinka.

Neka imamo heš, dobijen iz funkcije password_hash i neku lozinku. Da bismo proverili da li je to heš te lozinke ili nije, treba koristiti funkciju password_verify - kao prvi parametar ona prihvata lozinku, a kao drugi - heš, i vraća true ili false.

Pogledajmo na primeru:

<?php $password = '12345'; // lozinka $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // heš if (password_verify($password, $hash)) { // heš je od ove lozinke } else { // heš nije od ove lozinke } ?>

Šta nam ovo daje u praksi: možemo da ne pravimo u bazi podataka posebno polje za čuvanje soli, ne da se bavimo generisanjem te soli - PHP će sve to uraditi umesto nas!

To znači da će se pokazati da u bazi podataka u polju password ćemo čuvati sođenu lozinku zajedno sa njenom soli. Pored toga, heširana lozinka će imati veću dužinu. Zato u bazi podataka treba da ispravimo veličinu polja za lozinku i da je postavimo na 60 simbola.

Sada da ispravimo kod za registraciju. Evo šta sada imamo:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // dužina soli for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // simbol iz ASCII-tabele } return $salt; } $salt = generateSalt(); // so $password = md5($salt . $_POST['password']); // transformišemo lozinku u sođeni heš ?>

Pomoću password_hash skratićemo ovo do:

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

Na sličan način će se ispraviti i kod za autorizaciju:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // dobijamo korisnika po login-u $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // sođena lozinka iz baze // Proveravamo podudaranje heša iz baze sa unetom lozinkom if (password_verify($_POST['password'], $hash)) { // sve je u redu, autorizujemo... } else { // lozinka se ne poklapa, prikazaćemo poruku } } else { // ne postoji korisnik sa tim login-om, prikazaćemo poruku } ?>

Prepravite vašu autorizaciju i registraciju na nove proučene funkcije.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij