「cksum」が「md5sum」より遅く実行されるのはなぜですか?

「cksum」が「md5sum」より遅く実行されるのはなぜですか?

データが正しく送信されたことを確認するために、従来使用していた仮想マシンのWindowsインストーライメージをバックアップしておきました。cksum好奇心にcksum同じファイルの実行時間と実行時間を比較してみることにしました。md5sumI / Oキャッシュに関連していないことを確認するために、各ジョブを数回実行した後の結果は、常にmd5sum約半分の時間がかかりましたcksum。 2つの質問があります。

  1. md5sumなぜそんなに速くなったのですかcksum
  2. cksum私が選択する理由がありますかmd5sum

私はアーチLinuxを使用しています。

メモ:どちらが良いかという問題ではありません。これは以前に何度も議論されており、md5sumこれが次の用途に使用されるべきではないことを知っています。暗号化ハッシュ時。具体的には、どのようにmd5sum探す手段として活用するのか尋ねます。ランダムエラー

答え1

両方のハッシュアルゴリズムは異なる計算を実行するので、異なるパフォーマンス特性を持つことは驚くべきことではありません。 Linuxシステムでは通常md5sumGNUcksumバージョンcoreutilsです。md5sum最適化されており、一度に32ビットブロックの内容に対して機能するCライブラリのMD5機能を使用してください(参照:md5.cそしてmd5-block.c)。cksum一度に1バイトずつコンテンツを処理する独自のCRC実装を使用します(参照:cksum.c)。md5sumこれは他の製品に比べて速度が重要な要因かもしれませんcksum

ランダムエラーを見つけるためにどのツールがより適切かを判断するには、関連するアルゴリズムの数学的属性を分析する必要があります。非常に基本的なレベルでは、cksum32ビットハッシュが生成されるのに対し、md5sum128ビットハッシュが生成されるため、後者は偶発的な衝突に対してより強くなければなりません。したがって、特に反転ビット数が多い場合は、ランダムエラーをよりよく検出できます。より高いです)。

選択する唯一の理由cksumは、md5sum前者がPOSIXによって指定されているため、すべてのPOSIXシステムがこれを持つことになるからだと思います。これが要素であれば、cksumより適切です。

(暗号化ハッシュに対するあなたのコメントはcksumまったく暗号化ハッシュではないため、疑問の余地があります。)

関連情報