⊗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(); // туз $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çeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш