跳到主要內容

← 返回部落格

MD5 還能用嗎?MD5 vs SHA-256 vs SHA-512 一次搞懂

雜湊函數能把任意大小的資料轉成固定長度的「指紋」。它無所不在 —— 檔案下載、密碼儲存、數位簽章、去重。但並非所有雜湊函數今天都還適合用。這篇比較 MD5、SHA-256 與 SHA-512,並說明如何正確使用。

雜湊是什麼(不是什麼)

密碼學雜湊是單向函數:給定輸出,你無法反推輸入。同一輸入永遠得到相同輸出,而改動一個字元就會讓結果完全不同。這正是雜湊用於完整性校驗與密碼儲存的原因 —— 你比對的是指紋,而非原始資料。

雜湊不是加密(沒有金鑰、無法解密),也不是編碼(像 Base64 那樣任何人都能還原)。

為什麼 MD5 被視為不安全

MD5 產生 128 位元雜湊,曾經無所不在。問題在於碰撞 —— 不同輸入產生相同雜湊。研究者多年來已能廉價地製造 MD5 碰撞,這代表 MD5 無法再保證完整性:攻擊者可能製造一個與正常檔案有相同 MD5 的惡意檔案。

因此,MD5(以及較舊的 SHA-1)不應用於資安用途。事實上,瀏覽器內建的 Web Crypto API 根本不提供 MD5。我們的 Hash 產生器基於同樣理由只支援 SHA-2 系列。

SHA-256 vs SHA-512

兩者都屬於 SHA-2 家族,今天都被視為安全。差別在於:

  • SHA-256 產生 256 位元(64 個十六進位字元)雜湊。最廣泛使用,是很好的預設值。
  • SHA-512 產生 512 位元(128 個十六進位字元)雜湊。輸出更長,在 64 位元硬體上甚至可能更快。

對大多數用途 —— 檔案校驗、完整性檢查、一般指紋 —— SHA-256 是合理的預設。當某個標準或協定要求更長的摘要時,才選 SHA-512。

儲存密碼的正確方式

重點來了:你不該用單純雜湊儲存密碼,連 SHA-256 也不行。快速雜湊在現代硬體上容易被暴力破解。應改用專為密碼設計、刻意放慢並加鹽的演算法,例如 bcryptscryptArgon2。它們為每個密碼加上獨特的隨機鹽(salt),並有可調整的工作量以抵抗破解。

所以口訣:

  • 檔案完整性 / 指紋 → SHA-256(或 SHA-512)。
  • 密碼儲存 → 加鹽的 bcrypt / scrypt / Argon2 —— 絕不用裸的 SHA 雜湊。

校驗下載檔案

雜湊一個常見且正當的用途,是確認下載的檔案沒被損壞或竄改。發布者列出檔案的 SHA-256;你算出自己那份的雜湊再比對。相符,檔案就是完整的。

你可以用我們免費的 Hash 產生器在瀏覽器計算 SHA-256、SHA-384 與 SHA-512 —— 它使用原生 Web Crypto API,輸入不外傳。