Skip to main content

雜湊是什麼

雜湊(Hashing)是將密碼等明文以單向轉換方式產生固定長度字串的處理。 相同輸入永遠會得到相同雜湊值,但無法從雜湊值還原成原本的明文。 Laravel 的 Hash Facade 支援用於安全儲存密碼的 bcryptArgon2 雜湊演算法。

演算法比較

bcrypt 的「工作因子」控制產生雜湊所需的時間。雜湊越慢,對暴力破解的抵抗力就越高。當硬體變快時,可提高工作因子維持安全性。

雜湊與驗證流程


設定

Laravel 預設使用 bcrypt 驅動。可透過 HASH_DRIVER 環境變數變更。
若要自訂雜湊設定,可用 config:publish 發布設定檔。
發布後可在 config/hashing.php 更改預設工作因子等設定。

基本用法

對密碼進行雜湊

將明文密碼傳入 Hash::make() 可得雜湊值,將此值存入資料庫。
請將雜湊值存進資料庫,絕對不要儲存明文密碼。

調整 bcrypt 的工作因子

可透過 rounds 選項調整產生雜湊的計算成本。值越大越安全,但耗時也越多。 預設值(12)在多數應用中都合宜。

調整 Argon2 的工作因子

使用 Argon2 時可透過 memorytimethreads 調整計算成本。
Argon2 選項的詳細說明可參閱 PHP 官方文件

密碼驗證

使用 Hash::check() 可確認明文密碼是否與既存雜湊相符。 這在登入處理中是典型的用法。
使用 Auth::attempt() 時,此驗證會自動進行,不必自行呼叫。 Hash::check() 適合用在手動確認目前密碼的情境。

判斷是否需重新雜湊

使用 Hash::needsRehash() 可以確認產生雜湊時的工作因子是否與目前設定不同。 在你變更工作因子後,可將既有雜湊以新設定更新。
在登入成功時執行重新雜湊的範例:
請隨硬體效能提升定期檢視工作因子,以維持安全性。搭配 needsRehash(),即可在使用者登入時自然地更新密碼。

雜湊演算法驗證

預設情況下,Hash::check() 會確認雜湊是否以目前設定的演算法產生。 若演算法不同,會拋出 RuntimeException 如此可防止透過竄改雜湊演算法的攻擊。 若正處於演算法遷移期,需要同時支援多個演算法,可將 HASH_VERIFY 設為 false 停用此驗證。
HASH_VERIFY=false 會停用演算法驗證。僅在遷移期間使用,遷移完成後請改回 true(預設)。

總結

下一步

認證入門

學習使用 Hash::check() 實作登入等,掌握認證的全貌。
最後修改於 2026年8月2日