|
|
|
| Ответ 009 на задачу N 4.
С условиями задачи можно ознакомится по ссылке.
1. user - заняло 6.56959199905 сек
2. igor - заняло 2.5124540329 сек
3. lena - заняло 4.22129893303 сек
4. atom - заняло 0.584014177322 сек
Всего сценарий выполнялся 13.8876821995 сек
Можно, конечно уменьшить время, если перебирать только 4х значные пароли. Но раз уж мы не знаем точно длину, то вот так:
<?
$start_time = microtime();
$start_array = explode(" ",$start_time);
$start_time = $start_array[1] + $start_array[0];
function pass_md5 ($hash)
{
$start_time = microtime();
$start_array = explode(" ",$start_time);
$start_time = $start_array[1] + $start_array[0];
$alf = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$acount = count ($alf);
for ($i=0; $i<$acount; $i++)
{
$str=$alf[$i];
if (md5($str) == $hash)
{
echo "Gotcha! pass is <font color=red>$str</font>";
$end_time = microtime();
$end_array = explode(" ",$end_time);
$end_time = $end_array[1] + $end_array[0];
$time = $end_time - $start_time;
echo " - Найдено за $time секунд!<br>";
return;
}
for ($i=0; $i<$acount; $i++)
for ($j=0; $j<$acount; $j++)
{
$str=$alf[$i].$alf[$j];
if (md5($str) == $hash)
{
echo "Gotcha! pass is <font color=red>$str</font>";
$end_time = microtime();
$end_array = explode(" ",$end_time);
$end_time = $end_array[1] + $end_array[0];
$time = $end_time - $start_time;
echo " - Найдено за $time секунд!<br>";
return;
}
}
for ($i=0; $i<$acount; $i++)
for ($j=0; $j<$acount; $j++)
for ($k=0; $k<$acount; $k++)
{
$str=$alf[$i].$alf[$j].$alf[$k];
if (md5($str) == $hash)
{
echo "Gotcha! pass is <font color=red>$str</font>";
$end_time = microtime();
$end_array = explode(" ",$end_time);
$end_time = $end_array[1] + $end_array[0];
$time = $end_time - $start_time;
echo " - Найдено за $time секунд!<br>";
return;
}
}
for ($i=0; $i<$acount; $i++)
for ($j=0; $j<$acount; $j++)
for ($k=0; $k<$acount; $k++)
for ($l=0; $l<$acount; $l++)
{
$str=$alf[$i].$alf[$j].$alf[$k].$alf[$l];
if (md5($str) == $hash)
{
echo "Gotcha! pass is <font color=red>$str</font>";
$end_time = microtime();
$end_array = explode(" ",$end_time);
$end_time = $end_array[1] + $end_array[0];
$time = $end_time - $start_time;
echo " - Найдено за $time секунд!<br>";
return;
}
}
}
}
pass_md5('ee11cbb19052e40b07aac0ca060c23ee');
pass_md5('dd97813dd40be87559aaefed642c3fbb');
pass_md5('8dbc672497bdc46f88e864bb1121232c');
pass_md5('3e10f8c809242d3a0f94c18e7addb866');
$end_time = microtime();
$end_array = explode(" ",$end_time);
$end_time = $end_array[1] + $end_array[0];
$time = $end_time - $start_time;
echo "<br><center>Всего потрачено $time секунд!</center>";
?>
|
http://www.softtime.ru/info/task.php?id_article=74 | |
|
|
|
|
|
|
|
для: SoftTime
(07.02.2006 в 12:57)
| | Плохо, что пароли перебираются отдельно и используется большое количество вложенных циклов, но диапазон символов перебора легко расширяем и настраиваем. | |
|
|
|
|
|
|
|
для: SoftTime
(07.02.2006 в 12:57)
| | Все хорошо, только я бы вынес счет времини из цикла, сократив бы код. А так ничего нового. | |
|
|
|