Hash 雜湊演算法詳解:MD5、SHA-256 原理與應用場景比較

深入了解 Hash 雜湊演算法的原理,比較 MD5、SHA-1、SHA-256、SHA-512 的差異、安全性和適用場景。學習如何選擇正確的 Hash 演算法。

本文介紹的工具:Hash 計算器

什麼是 Hash 演算法?

Hash 雜湊演算法是一種將任意長度的輸入數據轉換為固定長度輸出的數學函數。這個輸出稱為「雜湊值」(Hash Value)或「摘要」(Digest)。

Hash 演算法具有以下特性:

  • 確定性:相同的輸入永遠產生相同的輸出
  • 不可逆性:無法從雜湊值反推原始數據
  • 雪崩效應:輸入的微小變化會導致輸出的巨大變化
  • 抗碰撞性:很難找到兩個不同的輸入產生相同的輸出

常見 Hash 演算法比較

演算法 輸出長度 安全性 速度 建議用途
MD5 128 bit 已破解 最快 檔案校驗(非安全用途)
SHA-1 160 bit 已破解 不建議使用
SHA-256 256 bit 安全 中等 數位簽章、密碼儲存
SHA-512 512 bit 安全 較慢 高安全性需求

MD5

MD5(Message Digest Algorithm 5)產生 128 位元的雜湊值,通常以 32 個十六進位字元表示。

MD5("Hello World") = b10a8db164e0754105b7a99be72e3fe5

注意:MD5 已被證明存在碰撞漏洞,不應用於安全相關的場景。但它仍然適合用於檔案完整性校驗等非安全用途。

SHA-256

SHA-256 是 SHA-2 家族的一員,產生 256 位元的雜湊值。它是目前最廣泛使用的安全雜湊演算法之一。

SHA-256("Hello World") = a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

SHA-256 被用於:

  • 比特幣和其他加密貨幣的挖礦
  • SSL/TLS 證書
  • 數位簽章
  • 密碼儲存(配合 salt)

實際應用場景

1. 密碼儲存

永遠不要以明文儲存密碼。正確做法是使用 Hash + Salt:

const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 10); // 10 rounds of salt

2. 檔案完整性校驗

下載檔案後,比對 Hash 值確認檔案未被竄改:

sha256sum downloaded-file.zip

3. 資料去重

使用 Hash 值快速判斷兩個檔案是否相同,無需逐位元比對。

如何選擇 Hash 演算法?

  • 安全性要求高(密碼、簽章)→ SHA-256 或 SHA-512
  • 檔案校驗(非安全用途)→ MD5 或 SHA-256
  • 密碼儲存→ bcrypt、scrypt 或 Argon2(專門設計的密碼 Hash)
  • 效能優先→ MD5(但需確認不涉及安全性)

實用工具推薦

使用我們的 Hash 計算器 可以快速計算文字或檔案的 MD5、SHA-1、SHA-256、SHA-512 雜湊值,方便開發除錯和檔案校驗。