SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

衝突する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
衝突しました

パスワードのようなほどほどの長さのテキスト同士に限定すると、衝突している事例は見かけないので、そういった条件付きならそう簡単には衝突しないようですね。

関連するメモ

コメント