MD5がファイルサイズにどのように依存するかについての効率分析はありますか?それは実際にファイルサイズまたはファイルの内容に依存していますか?したがって、すべての空白スペースを含む500mbファイルとムービーを含む500mbファイルがある場合、md5はハッシュコードを生成するのに同じ時間がかかりますか?
5 に答える
ハッシュサムは、定義上、合計するバイトの数学的合計です。少なくともストリームを介してファイルを読み取る必要があります。バイトが多いほど、トラバースに時間がかかります。ただし、(一般的に言って)ボトルネックは、ファイルをどのように使用しようとしても、実際にファイルを読み取っていると思います。一度読み取ったファイルをハッシュするのではありません。
編集:私はちょっと質問を読み間違えました。同じサイズの2つのファイルをハッシュするのにまったく同じ時間がかかります。500mbのスペースは、「スペース」を表す500mbのバイトです。他のファイルと同じように、それでも1バイトあたり8ビットのデータです。
Because MD5 consists mostly of XOR, AND, OR and NOT operations, the speed is not dependent on a given bit containing a 1 or a 0.
From http://en.wikipedia.org/wiki/MD5:
There are four possible functions F; a different one is used in each round:
ここで簡単な実験的テストを行います。
# dd if=/dev/urandom of=randomfile bs=1024 count=512000
# dd if=/dev/zero of=zerofile bs=1024 count=512000
# time md5 randomfile
MD5 (randomfile) = bb318fa1561b17e30d03b12e803262e4
real 0m2.753s
user 0m1.567s
sys 0m1.157s
# time md5 zerofile
MD5 (zerofile) = d8b61b2c0025919d5321461045c8226f
real 0m2.761s
user 0m1.567s
sys 0m1.168s
これは、MD5 アルゴリズムで使用されるビット操作をほのめかしている以前の回答によると予想されます。
一般に、MD5 を含むすべてのハッシュには、コンテンツに依存するパフォーマンスはありません。
MD5 は、他のほとんどのハッシュ アルゴリズムと同様に、ブロックで動作します。入力の 512 ビット ブロックごとに同じ操作を実行し、出力を次のブロックの入力の一部として使用します。
演算は、同じ基本演算 (XOR、AND、NOT など) で構成されます。私が知っているすべてのプロセッサでは、引数が何であれ、これらの操作には同じ時間がかかります。そのため、MD5 が入力を処理するのにかかる時間は、入力内の 512 ビット ブロックの数に比例するはずです。