ToolAct工具行動

檔案 MD5 校驗工具

計算檔案的 MD5 哈希值,驗證檔案完整性

上傳檔案

拖拽檔案到此處

支援任意檔案類型和大小

校驗比對

什麼是檔案 MD5?

MD5(Message-Digest Algorithm 5)是一種廣泛使用的哈希演算法,可將任意檔案內容映射為 128 位(32 個十六進制字元)的固定長度摘要。檔案內容任何微小的變化都會導致完全不同的 MD5 值。檔案 MD5 校驗工具常用於驗證檔案完整性,確保檔案在傳輸或下載過程中未被篡改或損壞。 安全相關結果不能孤立判斷,還要結合金鑰、使用情境、演算法選擇和可信來源一起評估。

如何使用

如何使用

  1. 點選上傳區域或將檔案拖曳至頁面
  2. 點選「計算 MD5」按鈕
  3. 等待計算完成,即可查看 MD5 值
  4. 您可在驗證區域輸入已知的 MD5 值進行比對

驗證限制

  • MD5 適合用於快速比對檔案是否一致,但抗碰撞性不足,不適用於安全性相關的驗證。
  • 下載或發佈版本時,請從可信來源取得雜湊值比對,並優先使用 SHA-256。

使用場景

為檔案產生舊式 MD5 校驗碼選擇檔案並計算其 128 位元的 MD5 值,過程中顯示進度,然後複製小寫十六進位摘要供仍需要此舊式校驗碼的系統使用。檔案以 Blob 形式讀取並完全在瀏覽器內雜湊——不會被上傳,因此可在不將內容傳送至任何地方的情況下處理私密檔案或廠商範例。
將檔案與預期的 MD5 值進行比對貼上已知的 MD5 值,驗證產生的 32 字元摘要是否匹配。這涵蓋了傳輸檢查、廠商需求、重複偵測以及仍發佈 MD5 值的舊版發布封存。當校驗碼涉及信任或安全性時,請改用更強的演算法——MD5 已知的碰撞攻擊使其不適合作為防竄改的依據。
避免將 MD5 作為安全保證此工具適合相容性作業和快速完整性檢查,但自王小雲 2004 年的攻擊以來 MD5 已被證明可碰撞,2012 年的 Flame 惡意軟體更展示了針對 Microsoft 程式碼簽章的真實 MD5 碰撞偽造。對於安全性相關的驗證,請改用檔案雜湊工具中的 SHA-256 或更強演算法。純本機設計讓檔案內容留在你的裝置上——只有摘要在頁面和比對欄位之間傳遞。
對照鏡像站下載進行 MD5 比對開源鏡像站和舊版韌體頁面仍會為每個版本發佈 MD5 總和。為下載的檔案產生 32 字元摘要,在刷入裝置或安裝成品前確認其與列出的字串匹配。大寫與小寫 Hex 是常見的靜默不匹配原因,因此比對以標準化形式進行。
涉及信任的場景請升級至 SHA-256MD5 用於偵測意外損壞沒問題(翻轉一個位元仍會產生完全不同的 128 位元摘要),但相同的摘要可以被攻擊者偽造。當校驗碼來自第三方且檔案將用於正式環境時,請切換至 SHA-256 或 SHA-512 選項——SHA-256 具備抗碰撞性,仍然是簽署發布的標準。

技術原理

MD5 是 RFC 1321(Ron Rivest,1992)定義的訊息摘要演算法 5,輸出 128 位元 / 16 位元組摘要,以 32 個十六進位字元呈現。演算法採用 Merkle-Damgård 結構:先對輸入填充,使位元長度對 512 取模為 448(先加一個 1 位元再補 0),接著以小端序 64 位元整數附加原始長度,再切成 512 位元的分組。每個分組更新一個 128 位元的內部狀態(A、B、C、D),初始值為 A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476;按 4 組 ×16 共 64 輪迭代,每輪使用按位函數 F(x,y,z) = (x AND y) OR ((NOT x) AND z)、G(x,y,z) = (x AND z) OR (y AND (NOT z))、H(x,y,z) = x XOR y XOR z、I(x,y,z) = y XOR (x OR (NOT z)),搭配常數 T[i] = floor(2^32 * |sin(i+1)|) 與左循環移位。最終狀態以小端序拼接即為摘要。空輸入的 MD5 為 d41d8cd98f00b204e9800998ecf8427e,常用作管線自檢。 瀏覽器不透過 crypto.subtle 提供 MD5(W3C Web Crypto 規範因碰撞攻擊刻意省略 MD5),因此本工具使用純 JavaScript 實作的 MD5 在瀏覽器內完成計算。檔案以 ArrayBuffer 形式讀入記憶體,一次性算出 16 位元組摘要並呈現為 32 個小寫十六進位字元。計算在主執行緒上執行,對多 GB 大檔做雜湊會占用主執行緒直到結束;非常大的檔案建議改用從磁碟串流讀取的桌面工具。 MD5 在抗碰撞性上已被攻破。王小雲、于紅波在 2004 年(CRYPTO 2005 發表)公布了首個實用碰撞攻擊,將碰撞代價降到約 2^39 次運算。2008 年 Sotirov 等人利用選擇前綴碰撞偽造了一張惡意中間 CA 憑證;2012 年 Flame 國家級惡意軟體使用此前未公開的選擇前綴 MD5 碰撞,偽造了 Microsoft Terminal Server Licensing 程式碼簽章憑證。NIST 在 2011 年的 SP 800-131A 中禁止把 MD5 用於數位簽章;CMU CERT 漏洞通告 VU#836068 稱 MD5「不適合再使用」。MD5 仍可用於偶發損壞檢測(即使翻轉一位也會透過雪崩效應改變約 64 位元輸出)以及受信輸入下的重複檔案檢測,但不要用於攻擊者可控制或預測輸入的情境。

  • MD5 產生 128 位元 / 16 位元組的摘要,編碼為 32 個小寫十六進位字元;定義於 RFC 1321(Rivest, 1992)。
  • 初始狀態常數 A = 0x67452301, B = 0xEFCDAB89, C = 0x98BADCFE, D = 0x10325476;64 輪運算分為四組,每組 16 輪,使用 F/G/H/I 位元函式和每輪常數 T[i] = floor(2^32 * |sin(i+1)|)。
  • 空輸入的 MD5 為 d41d8cd98f00b204e9800998ecf8427e——這是快速確認雜湊流程是否傳回有效摘要的完整性檢查。
  • 瀏覽器不透過 crypto.subtle 提供 MD5(W3C Web Crypto 刻意省略),本工具使用純 JavaScript 實作的 MD5:將檔案讀為 ArrayBuffer,一次性計算 16 位元組摘要,並呈現為 32 個小寫十六進位字元。
  • 記憶體占用:整個檔案會一次性讀入單一 ArrayBuffer 後再雜湊,因此多 GB 檔案需要對應大小的分頁記憶體;超過瀏覽器分頁可承載的檔案請改用從磁碟串流讀取的桌面工具(md5sum、certutil -hashfile、Get-FileHash)。
  • 碰撞攻擊:王小雲和于紅波(2004)約 2^39 次運算;Sotirov 等人(2008)選擇前綴碰撞用於偽造流氓 CA 憑證;Flame 惡意軟體(2012)利用選擇前綴碰撞偽造了 Microsoft 程式碼簽章憑證。
  • NIST SP 800-131A 於 2011 年禁止將 MD5 用於數位簽章;MD5 僅適用於非對抗性完整性檢查和重複偵測——當校驗碼影響信任時,請改用 SHA-256 或更強的演算法。

範例

空檔案的 MD5(眾所周知的常數)

檔案: empty.txt(0 位元組)

MD5: d41d8cd98f00b204e9800998ecf8427e

此值為空輸入的 MD5 -> 可作為簡易檢查,
確認雜湊流程從頭到尾都正常運作。

(RFC 1321 中針對空字串的參考向量。)

驗證下載的安裝程式

檔案:setup.bin(3 位元組,內容:abc)
計算的 MD5:900150983cd24fb0d6963f7d28e17f72
廠商提供的 MD5:900150983cd24fb0d6963f7d28e17f72

相符 -> 檔案複製或下載正確無誤。
不相符 -> 請重新下載,傳輸過程中位元組受損。

(此 MD5 值為 RFC 1321 中針對 3 位元組輸入 'abc' 的
參考向量。實務上請以實際安裝程式取代輸入;
此演算法的輸出是確定性的。)

比較兩個版本的檔案

report-v1.txt  (0 位元組)  -> MD5:d41d8cd98f00b204e9800998ecf8427e
report-v2.txt  (3 位元組,內容:abc)
                               -> MD5:900150983cd24fb0d6963f7d28e17f72

雜湊值不同 = 內容不同。即使只有一個字元變動,
MD5 也會完全改變,這正是完整性檢查的運作原理。

(兩個值皆為 RFC 1321 的 MD5 參考向量。)

Hello world 字串與檔案對比

MD5("hello")    = 5d41402abc4b2a76b9719d911017c592
MD5("hello\n")  = b1946ac92492d2347c6235b4d2611184

結尾換行符會改變雜湊值,因此名為 hello.txt 且內容
如上但結尾無 \n 的檔案會與第一行相符;若結尾有 \n
則與第二行相符。在跨作業系統比對已公布的 MD5 時,
這是常見的陷阱。

常見問題

檔案會被上傳到伺服器嗎?

不會。MD5 在你的瀏覽器中透過 File API 本機計算。位元組會分塊讀入記憶體並進行雜湊,全程不離開裝置。你可以在計算時打開「網路」分頁確認。

MD5 現在還能安全使用嗎?

在安全用途上不行。MD5 自 2004 年起已被攻破——可以快速產生碰撞,因此不可用於數位簽章、密碼儲存或防竄改檢查。它仍可作為快速校驗碼,用來偵測偶發的損毀(下載失敗、磁碟錯誤等)。

為什麼我有時看到小寫、有時看到大寫的 MD5?

MD5 產生 128 位元 = 16 位元組 = 32 個十六進位字元。這些十六進位字元寫成大寫或小寫純粹是顯示風格,底層的位元組完全相同;任何驗證程式都應採取大小寫不敏感的比對。

這裡可以雜湊多大的檔案?

現代桌面瀏覽器可處理數 GB 才會耗盡記憶體。行動瀏覽器較吃緊——大約幾百 MB。極大型檔案請使用系統指令(Linux 的 md5sum、Windows 的 certutil -hashfile、macOS 的 md5),這些工具會從磁碟串流讀取。

為什麼我的 MD5 跟其他工具的結果不同?

幾乎都是因為輸入差了一個位元組:不同的換行字元(CRLF 與 LF)、UTF-8 BOM、結尾空白,或不同版本的檔案。雜湊本身是確定性的,相同輸入在所有合規 MD5 實作中都會產生相同輸出。

「文字的 MD5」和「檔案的 MD5」有什麼差別?

MD5 雜湊的是位元組,不是字元。「文字的 MD5」會先把字串編碼(通常是 UTF-8),再對位元組做雜湊;「檔案的 MD5」則直接讀取檔案的位元組。同一字串以 UTF-8 與 UTF-16 儲存會產生不同的 MD5 值。

可以用 MD5 偵測重複檔案嗎?

可以,但要注意 MD5 已知的碰撞問題意謂惡意人士可能刻意造出兩個 MD5 相同卻不同的檔案。對於偶發性重複(照片、下載檔案)的偵測,MD5 既快速又夠可靠。若需要可信的去重,請改用 SHA-256。