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("Hello World") = b10a8db164e0754105b7a99be72e3fe5
注意:MD5 已被證明存在碰撞漏洞,不應用於安全相關的場景。但它仍然適合用於檔案完整性校驗等非安全用途。
SHA-256
SHA-256 是 SHA-2 家族的一員,產生 256 位元的雜湊值。它是目前最廣泛使用的安全雜湊演算法之一。
SHA-256("Hello World") = a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
SHA-256("Hello World") = a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
SHA-256 被用於:
- 比特幣和其他加密貨幣的挖礦
- SSL/TLS 證書
- 數位簽章
- 密碼儲存(配合 salt)
實際應用場景
1. 密碼儲存
永遠不要以明文儲存密碼。正確做法是使用 Hash + Salt:
javascript
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 10); // 10 rounds of salt
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 10); // 10 rounds of salt
2. 檔案完整性校驗
下載檔案後,比對 Hash 值確認檔案未被竄改:
bash
sha256sum downloaded-file.zip
sha256sum downloaded-file.zip
3. 資料去重
使用 Hash 值快速判斷兩個檔案是否相同,無需逐位元比對。
如何選擇 Hash 演算法?
- 安全性要求高(密碼、簽章)→ SHA-256 或 SHA-512
- 檔案校驗(非安全用途)→ MD5 或 SHA-256
- 密碼儲存→ bcrypt、scrypt 或 Argon2(專門設計的密碼 Hash)
- 效能優先→ MD5(但需確認不涉及安全性)
實用工具推薦
使用我們的 Hash 計算器 [blocked] 可以快速計算文字或檔案的 MD5、SHA-1、SHA-256、SHA-512 雜湊值,方便開發除錯和檔案校驗。



