相信很多人要麼是md5()直接存入庫或者儲存md5()和salt兩個欄位。但第一種不安全。第二種麻煩。好在php提供了更簡單的解決方案。
註:以下的前提條件是在php5.5版本中的
在php5.5以後,可以換一種存法了。簡單方便。
<?php
$pwd = "123456";
$hash = password_hash($pwd, PASSWORD_BCRYPT);
echo $hash;
// mysql中就只需要儲存這個hash值就行了。建議把資料庫該欄位值設定為255
if (password_verify($pwd, '資料庫中的hash值')) {
echo "密碼正確";
} else {
echo "密碼錯誤";
}
看到這時,可能有些人說tm以前我存密碼只是單獨存了一個md5的password,也沒有用salt,現在我想改成你這種,可怎麼辦好呢。
參考stackoverflow中的這個文章,也許對你有協助。
http://stackoverflow.com/questions/18906660/converting-md5-password-hashes-to-php-5-5-password-hash
$password = $_POST["password"];
// TODO 這裡要判斷一下這個密碼是否是正確密碼
// 然後再決定更新
if (substr($pwInDatabase, 0, 1) == "$")
{
// Password already converted, verify using password_verify
}
else
{
// User still using the old MD5, update it!
if (md5($password) == $pwInDatabase)
{
$db->storePw(password_hash($password));
}
}
不推薦圖中這種做法,因為double hash不會增加安全性。