⊗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-table } return $salt; } $salt = generateSalt(); // сол $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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне