如何透過雜湊值比較文件的各個部分?

如何透過雜湊值比較文件的各個部分?

我有一個成功下載的檔案和另一個下載失敗的檔案(只有大檔案的前 100 MB),我懷疑這是同一個檔案。

為了驗證這一點,我想檢查它們的雜湊值,但由於我只有未成功下載的檔案的一部分,所以我只想對前幾兆位元組左右進行雜湊值。

我該怎麼做呢?

作業系統是windows,但我安裝了cygwin和MinGW。

答案1

如果您將一個檔案與多個檔案進行比較,或將多個檔案相互比較,則建立雜湊來比較檔案是有意義的。

僅比較兩個檔案一次是沒有意義的:計算雜湊值的工作量至少與遍歷檔案並直接比較它們一樣高。

一個有效的文件比較工具是cmp

cmp --bytes $((100 * 1024 * 1024)) file1 file2 && echo "File fragments are identical"

您也可以將其結合起來dd比較兩個文件的任意部分(不一定從頭開始),例如:

cmp \
    <(dd if=file1 bs=100M count=1 skip=1 2>/dev/null) \
    <(dd if=file2 bs=100M count=1 skip=1 2>/dev/null) \
&& echo "File fragments are identical"

答案2

很抱歉我不能完全嘗試,但這種方法會起作用

dd if=yourfile.zip of=first100mb1.dat bs=100M count=1
dd if=yourotherfile.zip of=first100mb2.dat bs=100M count=1

這將為您提供兩個文件的前 100 MB。

現在取得哈希值:

sha256sum first100mb1.dat && sha256sum first100mb2.dat 

您也可以直接運行它:

dd if=yourfile.zip bs=100M count=1 | sha256sum 
dd if=yourotherfile.zip bs=100M count=1 | sha256sum 

答案3

每個人似乎都走 Unix/Linux 路線,但只需比較 2 個檔案就可以使用 Windows 標準命令輕鬆完成:
FC /B file file2

FC 出現在每個 Windows NT 版本。並且(如果沒記錯的話)也出現在 DOS 中。
雖然速度有點慢,但對於一次性使用來說沒關係。

答案4

我知道它說的是 Bash,但 OP 也說他們有 Windows。對於任何想要/需要 Windows 解決方案的人,有一個名為 HxD 的程序,它是一個可以比較兩個檔案的十六進位編輯器。如果檔案大小不同,它會判斷可用部分是否相同。如果需要,它能夠對目前選擇的任何內容運行校驗和。它是免費的,可以從以下位置下載:HxD 網站。我與作者沒有任何联系,我只是使用它多年。

相關內容