我寫了一個小小的PHP程序來回答這個問題。這不是非常科學,但它顯示散列值的第一個和最後8位使用自然數作爲哈希文本的分佈。經過大約40.000.000次哈希之後,最高和最低計數之間的差異降低到1%,所以我認爲分配是可以的。我希望代碼更精確地解釋什麼是計算:-) 順便說一句,與類似的程序,我發現最後8位似乎分佈略好於第一。
<?php
// Setup count-array:
for ($y=0; $y<16; $y++) {
for ($x=0; $x<16; $x++) {
$count[dechex($x).dechex($y)] = 0;
}
}
$text = 1; // The text we will hash.
$hashCount = 0;
$steps = 10000;
while (1) {
// Calculate & count a bunch of hashes:
for ($i=0; $i<$steps; $i++) {
$hash = md5($text);
$count[substr($hash, 0, 2)]++;
$count[substr($hash, -2)]++;
$text++;
}
$hashCount += $steps;
// Output result so far:
system("clear");
$min = PHP_INT_MAX; $max = 0;
for ($y=0; $y<16; $y++) {
for ($x=0; $x<16; $x++) {
$n = $count[dechex($x).dechex($y)];
if ($n < $min) $min = $n;
if ($n > $max) $max = $n;
print $n."\t";
}
print "\n";
}
print "Hashes: $hashCount, Min: $min, Max: $max, Delta: ".((($max-$min)*100)/$max)."%\n";
}
?>
來源
2012-02-19 04:05:04
rob
雖然我們在這裏,任何人都有良好的鏈接到證明非截斷md5總和的一致性嗎? – naught101
@ naught101:由於這個問題相當老舊(通過互聯網測量)並且有一個可接受的答案,所以不太可能從能夠回答您的問題的人那裏獲得更多的曝光 - 也許會提出自己的問題? :) – pinkgothic