ファイルの一部をハッシュで比較するにはどうすればいいですか?

ファイルの一部をハッシュで比較するにはどうすればいいですか?

正常にダウンロードされたファイルが 1 つあり、もう 1 つのダウンロードに失敗したファイル (大きなファイルの最初の 100 MB のみ) があり、これらは同じファイルであると思われます。

これを検証するために、ハッシュをチェックしたいのですが、ダウンロードに失敗したファイルの一部しか持っていないので、最初の数メガバイト程度だけをハッシュしたいと思います。

どうすればいいですか?

OS は Windows ですが、cygwin と MinGW がインストールされています。

答え1

1 つのファイルを複数のファイルと比較する場合、または複数のファイル同士を比較する場合は、ファイルを比較するためにハッシュを作成すると便利です。

2 つのファイルを 1 回だけ比較する場合は意味がありません。ハッシュを計算するための労力は、ファイルを走査して直接比較するのと同じくらい以上かかります。

効率的なファイル比較ツールは次のとおりですcmp

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

また、これを組み合わせて、dd2 つのファイルの任意の部分 (必ずしも先頭からではない) を比較することもできます。例:

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 メガバイトが取得されます。

次にハッシュを取得します。

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 ソリューションが必要な人には、2 つのファイルを比較できる 16 進エディターである HxD というプログラムがあります。ファイルのサイズが異なる場合、使用可能な部分が同じかどうかを判断します。また、必要に応じて、現在選択されているもののチェックサムを実行することもできます。無料で、次の場所からダウンロードできます。HxDウェブサイト作者とは何の関係もありませんが、ただ何年も使っています。

関連情報