二進位制檔案比較

拖入兩個檔案,本頁就在瀏覽器內對它們做逐位元組比較:每一個差異偏移、帶上下文的十六進位制 diff、差異密度圖,以及能顯示哪些位元位發生了變化的位元級分析。另有獨立的塊對齊模式,可檢測檔案中部的插入與刪除 — 這是普通逐位元組 diff 無法對齊的情形。結果可匯出 TXT 和 CSV。任何東西都不會被上傳。若要編輯位元組而非比較,見 高階十六進位制編輯器;文本比較則用 文本 Diff 工具。
檔案 A
把第一個檔案拖到這裡,或點選選擇
最大 200 MB。檔案留在本機。
檔案 B
把第二個檔案拖到這裡,或點選選擇
將與檔案 A 比較。
每個差異周圍的十六進位制上下文:  — 相距不足 16 位元組的相鄰差異會合併為一個塊顯示。
選擇兩個檔案並比較後,比較摘要會顯示在這裡。
逐位元組 diff 把偏移 N 對到偏移 N。如果某個檔案的中部被插入或刪除了位元組,其後所有內容都會移位,普通 diff 會把整個尾部都報告為不同。本模式對 1 KB 的塊做雜湊,在兩個檔案之間匹配這些塊,並以複製 / 插入 / 刪除操作的形式報告結果 — 與 xdelta 這類 delta 工具看待變化的方式一致。兩個檔案都不超過 64 MB 時可用。
隱私:兩個檔案都由瀏覽器自己的 FileReader 讀取並在這個標籤頁內比較 — 沒有伺服器、沒有上傳、沒有儲存。大檔案按 1 MB 分片比較,即使 200 MB 的輸入也不會一次性整體駐留記憶體(除非執行塊對齊檢視,它工作時會把兩個檔案都載入)。

什麼是二進位制檔案比較?

二進位制比較把兩個檔案從位元組 0 對齊後向前走,報告每一個位元組不同的偏移 — 相當於瀏覽器版的經典 cmp -l 命令。文本 diff 工具做不到這一點:它們要麼被不可列印位元組卡住,要麼用某種字元編碼悄悄重新解釋檔案。二進位制比較把兩個檔案當作它們本來的樣子 — 位元組陣列 — 這正是韌體映象、磁碟轉儲、資料庫檔案、加密資料塊或任何未知格式檔案所需要的。

三個問題在三種深度上得到回答。「它們相同嗎?」是校驗和問題 — 雜湊工具回答得最快,但只有是/否。「它們在哪裡不同?」是本頁的逐位元組 diff:偏移、取值、翻轉了哪些位元。「這是哪類變化?」是塊對齊檢視補充的 — 差異是原位編輯、插入的資料塊還是刪除的資料塊。

逐位元組 diff 與塊對齊 — 為什麼要兩種檢視?

情形逐位元組 diff 的說法塊對齊檢視的說法
某欄位被原位覆蓋(檔案大小不變)零散的幾個差異偏移相同,外加「其餘全部複製」
檔案 B 的偏移 2000 處插入了 1 KB從 2000 起「全部不同」複製 0–2000,插入 1 KB,複製其餘
檔案 B 中部刪除了一個塊從那一點起「全部不同」複製到缺口處,刪除 N 位元組,複製其餘
檔案 B 是檔案 A 前面加了不同的頭部整個檔案「不同」刪除頭部,然後一整段複製 — 即恆定偏移

逐位元組 diff 永遠是正確的 — 這些位元組確實在這些偏移上不同。變化的只是解讀:一旦有位元組被插入或刪除,解讀就會移位,就像在文本檔案開頭加一行會讓後面所有行號都變了一樣。

如何解讀位元級分析

對每個不同的位元組,本頁計算 A XOR B 並統計哪些位元位被置位。這個直方圖出人意料地有表現力:差異集中在位元 0(每個位元組的最低有效位)是 LSB 隱寫的指紋 — 隱藏訊息靠微調畫素或音訊取樣的最低位藏身。差異均勻分佈在全部八個位上,說明整個值被重寫了。只動高位的差異,通常意味著某個欄位被換成了數量級差別很大的值。漢明距離(翻轉位元的總數)用一個數字量化同一件事。

一個誠實的提醒:隨機資料在任何給定位元組上都有 1/256 的機率巧合相同,所以兩個毫無關係的同大小檔案仍會在約 0.4% 的位元組上一致。99.98% 的相似度加少數幾個短差異塊是補丁級變化;0.4% 的相似度則說明兩個檔案乾脆無關。

常見錯誤

「第一個差異之後整個檔案都紅了。」 — 這就是上面說的移位效應,不是真的損壞。執行塊對齊檢視:如果它報告一次插入加兩段長複製,那兩個檔案就恰好只差那一塊。「校驗和匹配但這裡顯示不同。」 — 如果 SHA-256 摘要一致,檔案就不可能不同;請檢查兩個工具裡開啟的是否是同一批檔案。而 CRC-32 匹配在面對蓄意碰撞時什麼也證明不了。「相似度 0.4%,可我只改了一處。」 — 如果你的修改在壓縮或加密容器內(ZIP、PNG zTXt、加密卷),一處邏輯變化會重寫整段壓縮流。

常見問題

大小限制是多少? — 逐位元組 diff 每個檔案最大 200 MB,按 1 MB 分片比較。塊對齊檢視要載入兩個檔案,所以每側限 64 MB。
能檢測被移動的塊嗎? — 對齊器按順序匹配塊;移到別處的塊會顯示為一次刪除加一次相同內容的插入 — 這是個正確但略顯生硬的描述。
能生成補丁檔案嗎? — 不能,它是分析工具;CSV 和 TXT 報告用於記錄與審閱,不能用來套用更改。
我的檔案會怎樣? — 什麼都不發生:沒有伺服器、沒有儲存、沒有分析;關掉標籤頁,輸入的每個位元組都消失了。