Hashing

雜湊(Hashing)是將任意長度的資料轉換為固定長度摘要的單向函數,無法還原原始資料。

雜湊演算法分類

密碼學雜湊函數

用於資料完整性驗證、數位簽章等場景。

演算法輸出長度狀態備註
MD5128 bits❌ 已不安全存在碰撞攻擊,僅用於校驗和
SHA-1160 bits❌ 已不安全2017 年已被實際碰撞攻擊
SHA-256256 bits✅ 安全SHA-2 家族,廣泛使用
SHA-512512 bits✅ 安全SHA-2 家族,適合高安全需求
SHA-3可變✅ 安全Keccak 演算法,最新標準

密碼儲存專用

設計為運算緩慢,抵抗暴力破解。

演算法特點建議參數
bcrypt內建 salt,可調整 costcost ≥ 10
scrypt高記憶體消耗,抵抗 GPUN=2^14, r=8, p=1
Argon22015 年密碼雜湊競賽冠軍Argon2id,memory ≥ 64MB
密碼儲存應使用 bcrypt、scrypt 或 Argon2,絕對不要使用 MD5、SHA-1 或純 SHA-256。

訊息驗證碼(MAC)

結合金鑰與雜湊函數,確保訊息完整性和來源真實性。

演算法說明
HMAC-SHA256使用 SHA-256 的 HMAC
HMAC-SHA512使用 SHA-512 的 HMAC
CMAC基於區塊加密的 MAC(如 AES)

非密碼學雜湊

用於快速查找、資料分片,不適用於安全場景。

演算法特點用途
CRC32快速,錯誤偵測檔案校驗和
MurmurHash快速,分布均勻Hash Table、分片
xxHash極快速大量資料快速雜湊
FNV簡單實作Hash Table

應用場景對照

場景建議演算法
密碼儲存Argon2id / bcrypt
API 簽章HMAC-SHA256
檔案完整性SHA-256
Git commit IDSHA-1(歷史原因)
資料分片MurmurHash / xxHash
重複檔案偵測SHA-256