衝突するmd5の例
問題
md5ハッシュは衝突しますか。
答え
ハッシュ値は128ビット(2^128通り)で有限なので、当然理論上は衝突する。
2^128 は 340282366920938463463374607431768211456 でIPv6と同じ個数。
短いデータだと、テキストではないが以下のような例がある。
サンプルコード
<?php $data1 = hex2bin('4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2'); $data2 = hex2bin('4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2'); $hash1 = md5($data1); $hash2 = md5($data2); echo $hash1 . "\n"; echo $hash2 . "\n"; if ($hash1 === $hash2) { echo '衝突しました' . "\n"; }
結果
008ee33a9d58b51cfeb425b0959121c9
008ee33a9d58b51cfeb425b0959121c9
衝突しました
パスワードのようなほどほどの長さのテキスト同士に限定すると、衝突している事例は見かけないので、そういった条件付きならそう簡単には衝突しないようですね。
コメント