MD5 雜湊生成器

計算文字、十六進位位元組或檔案的 128 位 MD5 摘要。結果隨輸入即時更新,在「對比」框中貼上預期的校驗值,即可知道兩者是否一致。

全部演算法

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 輸入或貼上文字,也可以切換為十六進位位元組輸入,或開啟檔案直接計算其原始位元組的雜湊。
  2. 除非原雜湊是用其他字元集的文字算出的,否則「文字編碼」保持 UTF-8 即可。
  3. 在「輸出格式」中選擇小寫十六進位、大寫十六進位或 Base64。
  4. 校驗下載的檔案時,把官方公佈的 MD5 貼上到「對比」框,顯示「一致」即表示檔案相同。

什麼是 MD5?

MD5(Message-Digest Algorithm 5)由 Ronald Rivest 設計,1992 年以 RFC 1321 釋出。它以 512 位為一塊讀取輸入,輸出 128 位摘要,通常寫成 32 個十六進位字元或 24 個 Base64 字元。相同的輸入永遠得到相同的摘要,而輸入哪怕只改動一位,輸出也會有大約一半的位隨之改變。

雜湊是單向的:它沒有金鑰,也無法把 MD5 值「解密」回原文。號稱能破解 MD5 的網站,其實只是在海量的常用詞和洩露密碼的雜湊表裡查詢,所以未加鹽的短密碼,其 MD5 往往幾秒鐘就能被查出來。

MD5 現在還安全嗎?

面對攻擊者時並不安全。2004 年,王小云等人公佈了實用的碰撞攻擊,即兩段不同的輸入得到相同的 MD5。隨後出現的選擇字首碰撞更進一步:2008 年研究人員藉此偽造出一張可用的 CA 證書,2012 年 Flame 惡意軟體又用它偽造了一張證書,讓自己的程式碼看起來像是由微軟簽名的。如今用普通筆記型電腦幾秒鐘就能構造出一對 MD5 碰撞,RFC 6151 也明確指出,在需要抗碰撞性的場合(例如數字簽名),MD5 已不再適用。

不過,用 MD5 檢測意外損壞仍然可行,比如下載不完整或磁碟上某一位出錯,也可以用作快取鍵,或對可信資料去重。如果檔案或其校驗值可能來自攻擊者,請改用 SHA-256。

十六進位、Base64 與結果不一致的原因

MD5 通常以十六進位表示,md5sum 輸出的就是這種形式。有些協議則把 16 個原始位元組編碼成 Base64 傳輸,例如 Amazon S3 等雲端儲存 API 使用的 HTTP Content-MD5 頭。選擇 Base64 輸出即可,已有的十六進位值也可以用十六進位轉 Base64 轉換。

如果你算出的 MD5 和其他工具不同,說明參與計算的位元組不同。常見原因是末尾多了換行符、使用了 Windows 換行符,或者文字編碼不同:「café」在 UTF-8 下是 5 個位元組,在 ISO-8859-1 下只有 4 個位元組,兩者的 MD5 毫無相似之處。

$ echo "hello" | md5sum      # 實際雜湊的是 "hello\n"
b1946ac92492d2347c6235b4d2611184  -
$ printf 'hello' | md5sum    # 只雜湊 "hello"
5d41402abc4b2a76b9719d911017c592  -

在命令列和程式碼中計算 MD5

md5sum file.iso                          # Linux
md5 file.iso                             # macOS
certutil -hashfile file.iso MD5          # Windows
Get-FileHash file.iso -Algorithm MD5     # PowerShell

# Python
import hashlib
hashlib.md5('hello'.encode('utf-8')).hexdigest()

// Node.js
require('crypto').createHash('md5').update('hello', 'utf8').digest('hex')

瀏覽器內建的 Web Crypto API 不提供 MD5,因此本頁在你的裝置上用 JavaScript 計算 MD5,不會上傳任何內容。結果下方的「全部演算法」表格還會列出同一輸入的 SHA-1、SHA-256、SHA-384、SHA-512、CRC-32 和 CRC-32C。

編碼範例

輸入 (UTF-8)MD5
Hello, World!65a8e27d8879283831b664bd8b7f0ad4
Base64.is2e3c0e8b828164a8db7f62146ca87e14
你好7eca689f0d3389d9dea66ae112e5cfd7

常見問題

MD5 可以解密嗎?
不能。MD5 是單向雜湊函式,不是加密演算法,因此不存在「解密」;所謂的 MD5 解密網站只能返回其表中早已收錄的輸入。如果以後還需要取回原始資料,應當使用加密;如果資料無需保密,也可以用 Base64 編碼,它可以完整還原。
用 MD5 校驗下載檔案夠用嗎?

MD5 能可靠地發現意外損壞。但由於構造碰撞的成本很低,事先準備好檔案的人可以再做出一個內容不同、MD5 卻相同的檔案。涉及安全的下載,請使用從可信來源獲得的 SHA-256 校驗值或數字簽名。

MD5 值有多長?
128 位,即 16 位元組:十六進位為 32 個字元,Base64 為 24 個字元,並以 == 結尾。32 個字元的十六進位字串也可能是 MD4 或 NTLM 雜湊,可以用雜湊識別工具列出可能的演算法。
可以計算大檔案的 MD5 嗎?
可以。開啟檔案後,瀏覽器會在本地讀取並計算其位元組的雜湊,不會上傳。上限取決於瀏覽器可用的記憶體,幾 GB 的超大檔案更適合用 md5sum 或 certutil 計算。
可以用 MD5 儲存密碼嗎?
不可以。MD5 的設計目標就是快,一塊 GPU 每秒就能嘗試數十億次猜測。儲存密碼應使用 Argon2id、scrypt、bcrypt 或 PBKDF2,它們會加鹽並刻意放慢計算。需要新密碼時,可以先用密碼生成器生成高強度密碼。