⊗ppPmAuHFP 426 of 447 menu

Функција password_hash

У ствари, функција md5 и салање лозинке њоме се сматра застарелом. Учили смо је да бисте разумели даљи материјал, а и зато што се можете сусрести са тим, радећи на туђим пројектима.

Постоји савршенији начин да се добије посолена лозинка. За то се користи функција password_hash. Као први параметар она прима стринг, а као други - алгоритам шифровања (о томе касније), и враћа хеш тог стринга заједно са солу.

Покушајте неколико пута да покренете овај код:

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

Сваки пут ћете добијати различит резултат и у том резултату први део стринга ће представљати солу, а други део - посолену лозинку.

Нека имамо хеш, добијен од функције password_hash и неку лозинку. Да би проверили да ли је то хеш те лозинке или није, треба користити функцију password_verify - као први параметар она прима лозинку, а као други - хеш, и враћа true или false.

Погледајмо на примеру:

<?php $password = '12345'; // лозинка $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // хеш if (password_verify($password, $hash)) { // хеш је од ове лозинке } else { // хеш није од ове лозинке } ?>

Шта нам то даје у пракси: можемо да не правимо посебно поље у бази података за складиштење соли, да не мучимо са генерисањем те соли - PHP ће све урадити за нас!

То значи да ће у бази података у пољу password чувати посолену лозинку заједно са њеном солом. При томе хеширана лозинка ће имати већу дужину. Зато у бази података морамо да исправимо величину поља за лозинку и поставимо је на 60 знакова.

Сада да исправимо код регистрације. Ево шта имамо тренутно:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // дужина соле for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // знак из ASCII табеле } return $salt; } $salt = generateSalt(); // солa $password = md5($salt . $_POST['password']); // претварамо лозинку у посолени хеш ?>

Помоћу password_hash ћемо то свести на:

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

На сличан начин се исправља код за аутентификацију:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // добијамо корисника по корисничком имену $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // посолена лозинка из базе // Проверавамо да ли се хеш из базе подудара са унетом лозинком if (password_verify($_POST['password'], $hash)) { // све је у реду, аутентификујемо... } else { // лозинка није исправна, приказујемо поруку } } else { // нема корисника са тим корисничким именом, приказујемо поруку } ?>

Промените вашу аутентификацију и регистрацију на нове научене функције.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј