PHPでハッシュの生成

10月 27th, 2008 by key

ふとMD5とSHA1のどっちが速いんだろう?と思い立ち、簡単にベンチマークを取ってみた。

数学的な内容は理解してないのだが、SHA1のほうが長いアウトプットを返すので処理が重そうなイメージ(想像です!)。とりあえずランダムを元に50万回ほどハッシュ計算させてみる。

for ($i=0; $i<500000; $i++) {
	md5(rand(0,1000));
}
for ($i=0; $i<100000; $i++) {
	sha1(rand(0,1000));
}

ベンチマークの結果はというと…。

実行回数 MD5 SHA1
1回目 4.23s 4.78s
2回目 4.46s 4.71s
3回目 4.32s 4.52s
4回目 4.24s 4.70s
5回目 4.29s 4.31s
6回目 4.17s 4.43s

6回実行してすべてMD5が勝利。

平均すると6%ほどMD5の方が高速で、単純にハッシュを生成する場合には、SHA1よりMD5のほうがパフォーマンスに優れます。

以下素人考えの能書きです。
間違ってたらコメント/トラバでご指摘くださいm(__)m

しかし、MD5は強衝突耐性に欠けており、同じハッシュ値を持った別のデータ列を比較的容易に探すことが出来るようです(wikipedia:MD5)。

例えばメールアドレスからハッシュを生成するなど、ユーザ入力からハッシュ生成を行うケースではMD5を用いてはいけないということを意味しており、その場合にはSHA1やSHA256など、別のアルゴリズムを使用すべきです。

何が言いたいかというと、MD5が速いからMD5だけ使っていれば良いわけではなくて、元のデータ列、ハッシュの利用方法などを吟味した上で、ハッシュアルゴリズムを選ぶ必要がありますね、ということです。

タグ: ,

0 Responses to “PHPでハッシュの生成”

Feed for this Entry Trackback Address
  1. コメントはまだありません

コメントをどうぞ