⊗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']; // калимаи убури намакдор аз PД // Мувофиқати хеш аз пойгоҳи додаҳо бо калимаи убури воридшударо санҷед 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
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан