RunToolz iconRunToolz
Welcome to RunToolz!
安全性雜湊密碼學

雜湊解釋:MD5、SHA,以及何時使用每一種

雜湊函數將任意資料轉換為固定長度的指紋。對比 MD5、SHA-1 和 SHA-256 的區別與適用場景,了解檔案校驗、密碼儲存和資料完整性驗證的實用方法。

RunToolz Team2026年1月18日5 min read

你下載一個檔案。網站顯示一個 MD5 校驗碼。你應該以某種方式驗證它。但為什麼?MD5 和 SHA-256 之間有什麼區別?

雜湊函數在軟體中無處不在。理解它們可以幫助你正確使用它們。

雜湊做什麼

雜湊函數接受任何輸入並產生固定大小的輸出。相同的輸入總是相同的輸出。改變一位輸入,輸出就完全改變。

"hello" → 5d41402abc4b2a76b9719d911017c592 (MD5)
"Hello" → 8b1a9953c4611296a827abf8c47804d7 (MD5)

一個大寫字母改變整個雜湊。這就是重點。

想親自試試嗎?生成雜湊

雜湊 vs 加密

雜湊是單向的。你不能反轉雜湊以取得原始資料。

加密是雙向的。使用正確的金鑰,你可以解密並恢復原始資料。

如果有人說他們可以「解密」MD5 雜湊,他們要麼在破解它(嘗試輸入直到一個匹配),要麼對雜湊的工作原理感到困惑。

常見演算法

MD5 - 128 位元輸出。快速但密碼學上已破解。適合校驗碼,不適合安全性。

SHA-1 - 160 位元。在密碼學使用上也已破解。舊系統仍在使用它。

SHA-256 - 256 位元。當前標準。當安全性很重要時使用這個。

SHA-512 - 512 位元。稍微更安全,有時在 64 位元系統上更快。

BLAKE2/BLAKE3 - 現代替代方案。比 SHA-256 快,具有類似的安全性。

何時 MD5 可以

MD5 名聲不好,因為它「已破解」。但密碼學上破解並不意味著無用。

檔案完整性檢查。 驗證下載沒有損壞。攻擊者需要創建具有相同雜湊的惡意檔案,這對於大多數非安全性情境的攻擊來說需要更多努力。

快取金鑰。 雜湊內容以生成唯一識別碼。沒有安全性影響。

去重複。 透過比較雜湊找到重複檔案。

何時使用 SHA-256 或更好的

密碼儲存。 實際上,改用 bcrypt 或 Argon2。它們是為密碼設計的。

數位簽章。 對手可能嘗試偽造的文件完整性。

任何安全關鍵的東西。 當攻擊者有動機尋找碰撞時。

碰撞問題

碰撞是當兩個不同的輸入產生相同的雜湊時。生日數學說碰撞變得可能比你預期的更早。

對於 MD5,研究人員已經找到創建故意碰撞的方法。兩個不同的檔案,相同的雜湊。這就是為什麼它「已破解」。

對於 SHA-256,不存在實際的碰撞攻擊。還沒有。

實際範例

驗證下載:

sha256sum ubuntu.iso
# 將輸出與下載頁面上的雜湊進行比較

儲存 API 金鑰: 儲存雜湊,而不是實際的金鑰。當使用者提交金鑰時,對其進行雜湊並比較。

Git 提交: Git 使用 SHA-1 來識別提交。這就是為什麼提交雜湊看起來像 a1b2c3d4e5f6...

不要自己發明

永遠不要發明你自己的雜湊方案。「MD5 兩次」或「SHA-256 附加鹽」比使用既定模式更糟。

對於密碼:bcrypt、scrypt 或 Argon2。 對於完整性:SHA-256。 對於速度:BLAKE3。

專家已經想出來了。


雜湊函數在概念上很簡單,但在應用上很細微。為工作選擇正確的演算法,不要在簡單校驗碼就足夠的地方使用密碼學雜湊。