Как говорит Майк, твой корпус неправильный.Но помимо этого, хэш md5 на самом деле представляет собой 16-значное значение, которое часто представляется в 32 байтах, чтобы позволить ему состоять только из букв и цифр.В этом случае он всегда будет состоять из цифр от 0 до 9 и букв от A до F (или это от a до f?), Так что вам нужно только проверить их.Теперь вы делаете неверное предположение, что 32-символьный код md5 является основным числом 36.
Функция md5 имеет второй параметр, который позволяет получить 16-байтовый необработанный код.
Другая проблема, с которой вы можете столкнуться, заключается в том, что PHP не так быстр и, как правило, имеет время ожидания.Может быть, лучше написать программу на другом языке, добавить несколько потоков и регулярно сохранять значение, чтобы вы могли возобновить работу программы после завершения работы.
[править] Может быть, это даст вам представление о том, какдолго ждать.md5 = 16 байт = 4 целых числа, максимум 4 миллиарда ($ FFFFFFFF) каждое.Таким образом, чтобы перебрать все значения этих 16 байтов, вам нужно вложить четыре цикла for, каждый из которых работает до 4 миллиардов:
<?
for($a = 0; $a <= 0xFFFFFFFF; $a++){
for($b = 0; $b <= 0xFFFFFFFF; $b++){
for($c = 0; $d <= 0xFFFFFFFF; $c++){
for($d = 0; $d <= 0xFFFFFFFF; $d++){
$code =
str_pad(dechex($a), 8, "0", STR_PAD_LEFT).
str_pad(dechex($b), 8, "0", STR_PAD_LEFT).
str_pad(dechex($c), 8, "0", STR_PAD_LEFT).
str_pad(dechex($d), 8, "0", STR_PAD_LEFT);
$md5code = md5($code);
if ($code == $md5code)
{
echo $code . "\n"; // Found one
}
}
}
}
}
echo 'done';