Rumah > Soal Jawab > teks badan
P粉8967510372023-08-18 17:37:32
Ya, anda memahaminya dengan betul, fungsi password_hash() akan menjana garam secara automatik dan memasukkannya ke dalam nilai cincang yang dihasilkan. Adalah betul untuk menyimpan garam dalam pangkalan data, ia akan berfungsi walaupun ia diketahui.
// 为在数据库中存储的新密码生成哈希值。 // 该函数会自动生成一个密码学安全的盐。 $hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT); // 检查输入的登录密码的哈希值是否与存储的哈希值匹配。 // 盐和成本因素将从$existingHashFromDb中提取。 $isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);
Garam kedua yang anda nyatakan (garam yang disimpan dalam fail), sebenarnya adalah kunci cili atau pelayan. Jika anda menambahnya sebelum hash (seperti garam), maka anda telah menambah lada cili. Tetapi ada cara yang lebih baik, anda boleh mengira nilai cincang dahulu dan kemudian menyulitkan nilai cincang menggunakan kunci sisi pelayan (penyulitan dua hala). Dengan cara ini anda boleh menukar kunci jika perlu.
Berbeza dengan garam, kunci ini harus dirahsiakan. Orang ramai sering keliru dan cuba menyembunyikan garam, tetapi lebih baik biarkan garam melakukan tugasnya dan gunakan kunci untuk menambah rahsia.
P粉4222270232023-08-18 10:36:51
Menggunakan password_hash
ialah cara yang disyorkan untuk menyimpan kata laluan. Jangan simpannya secara berasingan dalam pangkalan data dan fail.
Katakan kita mempunyai input berikut:
$password = $_POST['password'];
Cincang kata laluan pertama dengan:
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
Kemudian lihat output:
var_dump($hashed_password);
Seperti yang anda lihat, ia telah dicincang. (Saya andaikan anda telah menyelesaikan langkah-langkah ini).
Sekarang simpan kata laluan cincang ini dalam pangkalan data anda, Pastikan lajur kata laluan anda cukup besar untuk menampung nilai cincang (sekurang-kurangnya 60 aksara atau lebih lama) . Apabila pengguna meminta log masuk, anda boleh menyemak sama ada cincang dalam pangkalan data sepadan dengan input kata laluan melalui:
// 查询数据库获取用户名和密码 // ... if(password_verify($password, $hashed_password)) { // 如果密码输入与数据库中的哈希密码匹配 // 做一些操作,你懂的... 登录他们。 } // 否则,将他们重定向回登录页面。