使用方法
- 輸入或貼上文字,也可以切換為十六進位位元組輸入,或開啟檔案直接計算其原始位元組的雜湊。
- 除非原雜湊是用其他字元集的文字算出的,否則「文字編碼」保持 UTF-8 即可。
- 在「輸出格式」中選擇小寫十六進位、大寫十六進位或 Base64。
- 校驗下載的檔案時,把官方公佈的 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.is | 2e3c0e8b828164a8db7f62146ca87e14 |
你好 | 7eca689f0d3389d9dea66ae112e5cfd7 |
常見問題
MD5 可以解密嗎?
用 MD5 校驗下載檔案夠用嗎?
MD5 能可靠地發現意外損壞。但由於構造碰撞的成本很低,事先準備好檔案的人可以再做出一個內容不同、MD5 卻相同的檔案。涉及安全的下載,請使用從可信來源獲得的 SHA-256 校驗值或數字簽名。
MD5 值有多長?
== 結尾。32 個字元的十六進位字串也可能是 MD4 或 NTLM 雜湊,可以用雜湊識別工具列出可能的演算法。可以計算大檔案的 MD5 嗎?
md5sum 或 certutil 計算。