|
|
|
| Ответ 003 на задачу N 4.
С условиями задачи можно ознакомится по ссылке.
<?
$hash="e10f8c809242d3a0f94c18e7addb866";
$s=97; //ограничения по символам (a-z)
$do=122;
starta(); //начинаем отсчет времени
for ($i=1;$i<5;$i++) { //длина пароля от 1 до 4
for ($g=1;$g<=$i;$g++) $sim[$g]=$s; //"обнуляемся"
while ($sim[1]<=$do) { //пока не дошли до верхней границы
$pas="";
for ($g=1;$g<=$i;$g++) $pas.=chr($sim[$g]); //собираем пароль из символов
if (md5($pas)==$hash) { //сверяем с зашифрованным
echo "Пароль рашифрован: ".$pas."<br>"; finala(); //если нашли, то тормазим время и выдаем
}
$sim[$i]++; //увеличиваем на единицу поледний символ
for ($g=$i;$g>1;$g--) {if ($sim[$g]>$do) {$sim[$g-1]++; $sim[$g]=$s;}} //если какой-то из символов превысил верхнюю границу
}
} echo "Пароль не расшифрован"; //если не получилось
function starta() {
global $nowtime;
$nowtime=time();
}
function finala() {
global $nowtime;
echo "Операция заняла ".(time()-$nowtime)." сек.";
exit;
}
?>
|
Пароли:
http://www.softtime.ru/info/task.php?id_article=74 | |
|
|
|
|
|
|
|
для: SoftTime
(06.02.2006 в 14:42)
| | Очень компактно, но почему-то у меня не работает - пишет "Пароль не расшифрован", также не нравится повторы циклов for ($g=1;$g<=$i;$g++) и раздельная обработка паролей - в куче их расшировать быстрее получится. | |
|
|
|
|
|
|
|
для: cheops
(08.02.2006 в 22:50)
| | Так и задумано: там несуществующий md5 | |
|
|
|