Laravel 是一個流行的PHP Web 開發框架。在Laravel 開發中,密碼加密是一項常見的需求,因為存儲明文密碼會帶來安全隱患。 Laravel 提供了一種強大且易於使用的本地密碼哈希算法——bcrypt。本文將介紹如何在Laravel 中比較兩個bcrypt 加密後的密碼。
bcrypt 是一種基於Blowfish 加密算法的密碼哈希算法,它通過加入salt 和cost 值來增強安全性。 bcrypt 算法將密碼與salt 拼接後使用Blowfish 加密,然後輸出一個長度為60 字符的哈希值。以下是使用PHP 的password_hash()
在Laravel 中,可以使用Hash::check()方法輕鬆地比較明文密碼和bcrypt 哈希後的密文密碼。 check()方法會對比明文密碼與加密後的密碼,若兩者一致,返回true。
if (Hash::check('secret', $hashedPassword)) { // 如果兩個字符串一致,則返回true }
在此, $hashedPassword是保存在數據庫中的bcrypt 哈希值。
在使用check()方法時,務必確保第一個參數是明文密碼,第二個參數是加密後的哈希密碼。可以記住以下口訣:
“有bpp,比較鍋灶”:第一個參數是明文密碼(B),第二個參數是加密後的bcrypt 哈希值(pp)。也就是說,第一個參數可以被攻破,但第二個參數是安全的。
以下是比較兩個bcrypt 哈希值的完整示例:
$password = 'secret'; $hashedPassword = '$2y$10$LJrd9sGr0H1KSK8vVQVcMOZ0sQFpZ1t2qKZcKluXGDf9YOljxAF/6'; if (Hash::check($password, $hashedPassword)) { echo '密碼匹配成功! '; } else { echo '密碼匹配失敗! '; }
請注意, check()方法不僅僅比較兩個字符串是否相等,它還會驗證哈希字符串是否使用了正確的加密算法,並確保其格式無誤。