""
関数がおよびに対して何も返さないことに加えて"0"
、最終的なハッシュ値は、16 進数文字0
–<code>9 およびa
–<code>f の MD5 ハッシュ値のみで構成されます。これらは次のとおりです。
string(32) "cfcd208495d565ef66e7dff9f98764da"
string(32) "c4ca4238a0b923820dcc509a6f75849b"
string(32) "c81e728d9d4c2f636f067f89cc14862c"
string(32) "eccbc87e4b5ce2fe28308fd9f2a7baf3"
string(32) "a87ff679a2f3e71d9181a67b7542122c"
string(32) "e4da3b7fbbce2345d7772b0674a318d5"
string(32) "1679091c5a880faf6fb5e6087eb1b2dc"
string(32) "8f14e45fceea167a5a36dedd4bea2543"
string(32) "c9f0f895fb98ab9159f51fd0297e236d"
string(32) "45c48cce2e2d7fbdea1afc51c7c6ad26"
string(32) "0cc175b9c0f1b6a831c399e269772661"
string(32) "92eb5ffee6ae2fec3ad71c777531578f"
string(32) "4a8a08f09d37b73795649038408b5f33"
string(32) "8277e0910d750195b448797616e091ad"
string(32) "e1671797c52e15f763380b45e841ec32"
string(32) "8fa14cdd754f91cc6554c9e71929cce7"
で同じものを使用する場合md7($c, 32)
:
NULL
string(32) "4a8a08f09d37b73795649038408b5f33"
string(32) "4a8a08f09d37b73795649038408b5f33"
string(32) "e1671797c52e15f763380b45e841ec32"
string(32) "0cc175b9c0f1b6a831c399e269772661"
string(32) "e1671797c52e15f763380b45e841ec32"
string(32) "c4ca4238a0b923820dcc509a6f75849b"
string(32) "c9f0f895fb98ab9159f51fd0297e236d"
string(32) "4a8a08f09d37b73795649038408b5f33"
string(32) "a87ff679a2f3e71d9181a67b7542122c"
string(32) "cfcd208495d565ef66e7dff9f98764da"
string(32) "45c48cce2e2d7fbdea1afc51c7c6ad26"
string(32) "a87ff679a2f3e71d9181a67b7542122c"
string(32) "c9f0f895fb98ab9159f51fd0297e236d"
string(32) "e1671797c52e15f763380b45e841ec32"
string(32) "c9f0f895fb98ab9159f51fd0297e236d"
繰り返しますが、 を0
返しますNULL
。しかし、もっと興味深いのは、{ 1
, 2
, 8
}、{ 3
, 5
, 7
}、および { c
, f
} の文字が同じハッシュ値になることです。これは、MD5 ハッシュ値が同じオクテットで始まるためです。これらのハッシュを使用して最終的な MD7 ハッシュを作成すると、結果のハッシュの最初の 32 文字の 16 進数も同じになります。
したがって、長さが 32 以下の場合、可能な MD7 ハッシュは 16 のみであり、長さが 64 以下の場合、2 つの MD7 ハッシュは 16 あります。最大長は 3・32・32=3072 であり、可能な MD7 ハッシュ値の数は 16 3・32です。
しかし、最後の 3072 文字の長さの MD7 ハッシュには 16^192 エントロピーがありません。最後の 1024 文字は、既知の結果の MD7 ハッシュの長さから派生するため、不明な文字は 2048 文字しか残っていません。
ハッシュ ループを逆にすることができるため、テキストとその長さの初期 MD5 を取得することもできます。
次に例を示します。
function md7_info($hash) {
$hashlen = strlen($hash);
$md5_to_hex = array();
foreach (str_split('0123456789abcdef') as $c) $md5_to_hex[md5($c)] = $c;
$md5_text = '';
foreach (str_split(substr($hash, 0, 1024), 32) as $h) $md5_text .= $md5_to_hex[$h];
$md5_textlen = '';
foreach (str_split(substr($hash, 1024, 1024), 32) as $h) $md5_textlen .= $md5_to_hex[$h];
return array($md5_text, $md5_textlen, $hashlen);
}
元のテキストの長さの MD5 を逆にすることもできます。最終的に残る情報は、MD5 とテキストの長さです。それほど多くのセキュリティは得られません。実際、テキストの長さを知ることで、実際に追加情報が明らかになります。