⊗ppPmAuHFP 426 of 447 menu

Fungsi password_hash

Sebenarnya fungsi md5 dan penggaraman kata laluan menggunakannya dianggap lapuk. Kami mempelajarinya agar anda memahami bahan seterusnya, dan juga kerana anda mungkin menghadapinya apabila bekerja dengan projek orang lain.

Terdapat cara yang lebih sempurna untuk mendapatkan kata laluan bergaram. Untuk ini, fungsi password_hash digunakan. Parameter pertamanya menerima rentetan, dan yang kedua - algoritma penyulitan (tentangnya kemudian), dan mengembalikan hash rentetan itu bersama-sama dengan garam.

Cuba jalankan kod ini beberapa kali:

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

Anda akan mendapat hasil yang berbeza setiap kali dan dalam hasil tersebut, bahagian pertama rentetan akan menjadi garam, dan bahagian kedua - kata laluan bergaram.

Katakan kita ada hash, diperoleh daripada fungsi password_hash dan beberapa kata laluan. Untuk memeriksa sama ada ini hash kata laluan ini atau bukan, gunakan fungsi password_verify - parameter pertamanya menerima kata laluan, dan yang kedua - hash, dan mengembalikan true atau false.

Mari lihat contoh:

<?php $password = '12345'; // kata laluan $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash daripada kata laluan ini } else { // hash bukan daripada kata laluan ini } ?>

Apa yang ini berikan kepada kami secara praktikal: kami boleh tidak mencipta medan berasingan dalam pangkalan data untuk menyimpan garam, tidak pening menguruskan penjanaan garam ini - PHP akan melakukan semuanya untuk kami!

Maksudnya, dalam pangkalan data di medan password kami akan menyimpan kata laluan bergaram bersama-sama dengan garamnya. Pada masa yang sama, kata laluan terhash akan mempunyai panjang yang lebih besar. Oleh itu dalam pangkalan data, kami perlu membetulkan saiz medan kata laluan dan menetapkannya kepada 60 aksara.

Sekarang mari kita betulkan kod pendaftaran. Ini yang ada sekarang:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // panjang garam for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // aksara daripada jadual ASCII } return $salt; } $salt = generateSalt(); // garam $password = md5($salt . $_POST['password']); // tukar kata laluan kepada hash bergaram ?>

Dengan menggunakan password_hash, kami akan memendikkannya kepada:

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

Kod pengesahan akan dibetulkan dengan cara yang sama:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // dapatkan pengguna mengikut log masuk $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // kata laluan bergaram dari Pangkalan Data // Semak kesesuaian hash dari pangkalan data dengan kata laluan yang dimasukkan if (password_verify($_POST['password'], $hash)) { // semuanya ok, sahkan... } else { // kata laluan tidak sesuai, paparkan mesej } } else { // tiada pengguna dengan log masuk ini, paparkan mesej } ?>

Ubah suai pengesahan dan pendaftaran anda kepada fungsi baru yang dipelajari.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak