Argon2雜湊驗證|比對密碼與已編碼雜湊
輸入密碼與已有的Argon2編碼雜湊($argon2id$...),檢測兩者是否匹配。全部計算均在瀏覽器本地完成,不會將任何內容傳送到伺服器。
Argon2雜湊驗證小貼士
- 驗證時,請直接貼上由Argon2雜湊計算工具生成的已編碼雜湊(以 $argon2id$ 開頭的字串)。
- 已編碼雜湊中已經包含了變體型別、記憶體成本、迭代次數和鹽值等全部資訊,因此驗證時無需另行指定這些引數。
- 如果雜湊格式不正確(例如複製時缺漏字元或混入了換行符),系統會顯示錯誤提示,請確認是否完整準確地複製了全文。
- 如果驗證結果顯示不匹配,請檢查密碼中是否意外包含了大小寫差異或前後多餘的空白字元。
常見問題
雜湊計算是根據密碼生成一個新的雜湊值,而驗證則是判斷已有的雜湊值與密碼是否一致。通常的做法是在註冊時生成並儲存雜湊,在登入時只進行驗證。
當輸入的雜湊不是以 $argon2id$、$argon2i$ 或 $argon2d$ 開頭的正確編碼格式時,就會顯示該提示。請檢查複製時是否有字元缺漏,或者前後是否混入了多餘的空格或換行符。
常見原因包括大小寫差異、全形與半形字元的差異,以及前後混入了多餘的空白字元。密碼只要有一個字元不同就無法匹配,請再次核對原始字串。
不會。所有輸入內容都在瀏覽器內通過WebAssembly處理,不會發送到伺服器,也不會被儲存。
請使用配套的Argon2 雜湊計算工具,支援 Argon2id、Argon2i、Argon2d 三種方式。
閒話 ― 為什麼密碼只需“比較雜湊”就能完成驗證
密碼驗證乍看之下像是“直接比較已儲存的密碼與輸入的密碼”,但實際的運作機制其實完全不同。伺服器(或者像本工具這樣在客戶端進行處理的場景)會使用與儲存時相同的演算法和相同的鹽值,對輸入的密碼重新計算一次雜湊值,然後只需比較這個新計算出的結果是否與已儲存的雜湊值一致即可。也就是說,原始密碼本身從未被直接“比較”過,僅通過雜湊值之間的一致性判斷就能完成驗證——這正是這種方式的巧妙之處。
這一機制之所以成立,是因為像Argon2這樣的雜湊函式具有“確定性”(deterministic):只要輸入內容、鹽值和引數完全相同,就一定會得到相同的輸出結果。而已編碼的雜湊字串(格式為 $argon2id$v=19$m=...$salt$hash)本身就已經嵌入了計算時使用的全部鹽值和引數,因此驗證時無需另行指定原始引數,僅憑這一串字元本身就足以完成完整的重新計算。
也正是因為具備“單向性”(無法從雜湊值反向推算出原始密碼)和“確定性”(相同輸入必得相同輸出)這兩個特性,服務運營方才能夠完全不儲存使用者的原始密碼,同時依然能夠在登入時安全地完成驗證。即使資料庫不幸遭到洩露,攻擊者所能獲得的也只是雜湊值而已,而對於像Argon2這樣計算成本很高的演算法來說,想要靠暴力破解還原出原始密碼,往往需要耗費極其漫長的時間——這也是它至今仍被廣泛信賴的原因。