結論
密碼在客戶端經過哈希處理後傳輸,服務端同樣存儲哈希值,驗證時直接比對哈希,無需解密。
典型流程
- 用戶輸入密碼 `P`。
- 客戶端計算 `H = Hash(P + Salt)`(Salt 可能來自服務端下發的隨機數或固定鹽值)。
- 傳輸 `H`(或 `H` 經過非對稱加密)給服務端。
- 服務端查詢數據庫獲取存儲的 `H_stored`,比對 `H == H_stored`。
關鍵技術點
- 單向哈希:MD5/SHA1(已淘汰)、SHA-256、PBKDF2、bcrypt、Argon2、scrypt。現代系統採用**慢哈希 + 隨機鹽**抵抗彩虹表/暴力破解。
- 傳輸加密:全鏈路 HTTPS(TLS 1.2+),防止中間人竄改/重放。
- 防重放:登錄請求攜帶時間戳/Nonce,服務端校驗時效性。
- 客戶端加密意義:即使 HTTPS 被降級或終端被監控,明文密碼不出內存,降低洩露風險。
數據庫洩露後的安全性
因存儲的是哈希而非明文/可逆密文,攻擊者需進行離線暴力破解,成本極高(取決於哈希算法強度與鹽值長度)。