バイナリファイル比較

2 つのファイルをドロップすると、このページはブラウザー内でバイト単位で比較します:異なるすべてのオフセット、コンテキスト付きの hex 差分、差分密度マップ、そしてどのビットが変わったかを示すビットレベル分析。独立したブロック整列モードは、ファイル途中の挿入と削除を検出します — 素のバイト差分が整列できないケースです。結果は TXT と CSV に書き出せます。どこにもアップロードされません。バイトを比較ではなく編集したい場合は hex エディターを、テキストにはテキスト差分ツールを。
ファイル A
最初のファイルをここにドロップ、またはクリックして選択
最大 200 MB。このマシンから出ません。
ファイル B
2 番目のファイルをここにドロップ、またはクリックして選択
ファイル A と比較されます。
各差分の周囲の hex コンテキスト: — 16 バイト未満で隣接する差分は 1 ブロックとして表示されます。
両方のファイルを選んで比較すると、比較サマリーがここに表示されます。
バイト単位の差分はオフセット N をオフセット N に整列させます。片方のファイルの途中でバイトが挿入または削除されると、それ以降すべてがずれ、素の差分は末尾全体を異なると報告します。このモードは 1 KB ブロックをハッシュし、ファイル間で照合し、結果をコピー / 挿入 / 削除操作として報告します — xdelta のような差分ツールが変更を見る方法です。両ファイルが 64 MB 以下のときに利用できます。
プライバシー:両ファイルはブラウザー自身の FileReader で読み取られ、このタブ内で比較されます — サーバーもアップロードも保存もありません。大きなファイルは 1 MB のスライスで比較されるため、200 MB の入力でも一度に全部がメモリに乗ることはありません(作業中に両ファイルを読み込むブロック整列ビューを除く)。

バイナリファイル比較とは?

バイナリ比較は 2 つのファイルをバイト 0 で揃えて前へ進み、バイトが異なるすべてのオフセットを報告します — 古典的な cmp -l コマンドのブラウザー版です。テキスト差分ツールにはこれができません:印字不能バイトで詰まるか、何らかの文字エンコーディングでファイルを黙って再解釈します。バイナリ比較は両ファイルをまさにそのもの — バイト配列 — として扱い、ファームウェアイメージ、ディスクダンプ、データベースファイル、暗号化 blob、形式の知らないファイルにこそ望ましいものです。

3 つの問いが 3 つの深さで答えられます。「同じか?」はチェックサムの問いです — ハッシュツールが最も速く答えますが、イエスかノーだけです。「どこで異なるか?」がこのページのバイト差分です:オフセット、値、どのビットが反転したか。「どんな種類の変更か?」がブロック整列ビューの追加価値です — 差分がその場編集なのか、挿入されたチャンクなのか、削除されたチャンクなのか。

バイト差分対ブロック整列 — なぜ 2 つのビュー?

状況バイト単位差分の言うことブロック整列ビューの言うこと
フィールドがその場で上書きされた(同サイズ) 散在する少数の差分オフセット 同じ、+「それ以外はすべてコピー」
ファイル B のオフセット 2000 に 1 KB が挿入された 2000 以降すべてが「異なる」 0〜2000 をコピー、1 KB 挿入、残りをコピー
ファイル B の途中のブロックが削除された その時点以降すべてが「異なる」 穴までコピー、N バイト削除、残りをコピー
ファイル B はファイル A に別のヘッダーが先頭に付いたもの ファイル全体が「異なる」 ヘッダーを削除、以降 1 つの長いコピー — つまり一定のシフト

バイト差分は常に正しいです — それらのバイトは本当にそのオフセットで異なります。ずれるのは、バイトが挿入・削除された後の解釈のほうで、テキストファイルの先頭に 1 行追加すると以降すべての行番号が変わるのと同じです。

ビットレベル分析の読み方

異なる各バイトについて、ページは A XOR B を計算し、どのビット位置が立っているかを数えます。そのヒストグラムは驚くほど表現力があります:ビット 0(各バイトの最下位ビット)に集中する差分は LSB ステガノグラフィの指紋で、ピクセルや音声サンプルの下位ビットを僅かに動かしてメッセージを隠す手法です。8 位置すべてに均等に広がる差分は、値全体が書き換えられたことを意味します。上位ビットだけの差分は、通常、1 つのフィールドが大きく異なる大きさの値で置き換えられたことを意味します。ハミング距離(反転ビットの総数)は同じものを 1 つの数で定量化します。

正直な注意:ランダムデータは任意のバイトで 1/256 の確率で一致するため、同じサイズの無関係な 2 ファイルでも約 0.4% のバイトで一致します。99.98% の類似度と少数の短い差分ブロックはパッチレベルの変更です。0.4% の類似度は、ファイルが単に無関係であることを意味します。

よくある間違い

「最初の差分以降、ファイル全体が赤。」 — 上述のシフト効果であって、実際の破損ではありません。ブロック整列ビューを実行してください:1 つの挿入と 2 つの長いコピー操作を報告するなら、ファイルはその挿入チャンク分だけ異なります。「チェックサムは一致したのにここでは異なる。」 — SHA-256 ダイジェストが一致すればファイルは異なりません。両ツールで同じファイルを開いたか再確認してください。一方 CRC-32 の一致は、意図的な衝突に対しては何も証明しません。「類似度 0.4% なのに 1 つしか変えていない。」 — 編集が圧縮・暗号化コンテナ(ZIP、PNG zTXt、暗号化ボリューム)の中なら、1 つの論理的変更が圧縮ストリーム全体を書き換えます。

よくある質問

サイズ上限は? — バイト差分はファイルあたり 200 MB で、1 MB スライスで比較されます。ブロック整列ビューは両ファイルを読み込むため、片側 64 MB までです。
移動したチャンクを検出する? — 整列器はブロックを順番に照合します。別位置へ移動されたチャンクは、同じ内容の削除+挿入として現れます。正確ではあるがやや鈍い記述です。
パッチファイルを作れる? — いいえ、分析ツールです。CSV と TXT レポートは文書化とレビュー用で、変更の適用用ではありません。
ファイルはどうなる? — 何もなりません:サーバーなし、保存なし、解析なし。タブを閉じれば入力の全バイトが消えます。