開始前可以先看一下這篇,理解一下什麼是明碼、為什麼資料庫內不能存明碼。
[資訊安全] 密碼存明碼,怎麼不直接去裸奔算了?淺談 Hash , 用雜湊保護密碼
$password = '1111'; //假設使用者輸入的密(明)碼是 1111
$password_hash = password_hash($password, PASSWORD_DEFAULT); //將明碼雜湊
這時候如果印出$password_hash
,會得到一串像亂碼的東西!
類似這樣:$2y$10$yWSkKzzapRl22zjh67vE3.KxaR1lvMjsYToc5jKnAWfVadLa8jYUe
所以把這樣的$password_hash
存進資料庫就行了~
除了PASSWORD_DEFAULT,這個函式也提供其他選項,有興趣可以去這裡看看:
使用php裡提供的password_verify()
來做登入時密碼的驗證。
$password是使用者登入時輸入的明碼,
$password_hash是存在資料庫裡經過雜湊的密碼(上面那串)。
if (password_verify($password, $password_hash)) {
echo '密碼正確';
} else {
echo '密碼錯誤';
}
用password_hash()
加密,用password_verify()
驗證。
password_hash():https://www.php.net/manual/en/function.password-hash.php
password_verify():https://www.php.net/manual/en/function.password-verify.php