檔案 MD5 校驗工具
計算檔案的 MD5 哈希值,驗證檔案完整性
拖拽檔案到此處
支援任意檔案類型和大小
什麼是檔案 MD5?
MD5(Message-Digest Algorithm 5)是一種廣泛使用的哈希演算法,可將任意檔案內容映射為 128 位(32 個十六進制字元)的固定長度摘要。檔案內容任何微小的變化都會導致完全不同的 MD5 值。檔案 MD5 校驗工具常用於驗證檔案完整性,確保檔案在傳輸或下載過程中未被篡改或損壞。 安全相關結果不能孤立判斷,還要結合金鑰、使用情境、演算法選擇和可信來源一起評估。
如何使用
如何使用
- 點選上傳區域或將檔案拖曳至頁面
- 點選「計算 MD5」按鈕
- 等待計算完成,即可查看 MD5 值
- 您可在驗證區域輸入已知的 MD5 值進行比對
驗證限制
- MD5 適合用於快速比對檔案是否一致,但抗碰撞性不足,不適用於安全性相關的驗證。
- 下載或發佈版本時,請從可信來源取得雜湊值比對,並優先使用 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。