両方のファイルでCRC(または、より良いことにsha1sums)を計算するには、とにかくすべてのバイトを読み取る必要があります。バイトごとの比較を行う場合、不一致が見られたらすぐに終了できます-同じチェックサムを持つ2つの異なるファイルを心配する必要はありません(sha1sumではほとんどありそうにありませんが) 。したがって、ローカルで比較を行う場合、バイト単位の比較は、少なくともチェックサム比較と同じくらい高速になります(とにかくチェックサムを既に計算していない限り)。
一方、チェックサム比較は、同じマシン上にないファイルを比較するときに役立ちます。チェックサムはローカルで計算でき、コンテンツ全体をネットワーク経由で転送する必要はありません。
ハイブリッドアプローチも可能です。たとえば、計算し、(全体のファイルを読み込むことができないよう一度に2つのファイルチャンクのためのチェックサムの比較可能性があるならば、彼らは異なる)も、ネットワーク経由でファイル全体を送信回避しながらの。rsyncのプロトコルは、このような何かを行います。
Dave Ragerが答えで述べたように、単純なCRCを使用すると、衝突の可能性がかなり高くなることに注意してください。少なくとも sha1sum、またはそれより新しいものを使用します。(独自のハッシュアルゴリズムを発明しようとしないでください。sha1sumを開発した人々は、私たちよりもはるかにこのことについてよく知っています。)
あなたがSHA1SUMのようなまともなハッシュを使用している場合、誰かが意図的とされていない限り、衝突の可能性として、あなたはかなり、それを心配する必要はありません費用をかけてそのsha1sums衝突(このような衝突が発生したファイルを構築可能ではない、私が最初にこれを書いたときに、しかし進歩はなされている)。引用スコット・チャコンの「プロのGit」、セクション6.1:
これは、SHA-1コリジョンを起こすために必要なことを理解するための例です。地球上の65億人すべてがプログラミングを行い、1秒ごとに、Linuxカーネルの歴史全体(100万Gitオブジェクト)に相当するコードを作成し、それを1つの巨大なGitリポジトリにプッシュすると、5年かかりますそのリポジトリには、単一のSHA-1オブジェクトの衝突の確率が50%になるのに十分なオブジェクトが含まれていました。プログラミングチームのすべてのメンバーが、同じ夜に無関係なインシデントでオオカミに攻撃されて殺される可能性が高くなります。
まとめ:
バイトごとの比較は、ローカル比較に適しています。sha1sumはリモート比較に適していて、誤検知の重大な可能性はありません。