|
|
|
| Ответ 004 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
<?php
$hash=array(
"fb28e9240e83a5264566de844cc45523",
"437233c74e25fe505293cd2e8ecc2696",
"06b2d4b91b5c9eaa8c20a1c270f95b3c",
"e206a54e97690cce50cc872dd70ee896",
"fbfa6902f089e5a0fa2424bd460ecfd0"); //все хеши помещаем в массив
$hash_tmp=$hash; //помещаем все данные во временный масив
$total=count($hash); //считаем их общее количество
$words=file("linux.words"); //помещаем все слова в массив
foreach ($words as $word) //проверяем поочередно все слова
{
foreach ($hash_tmp as $key=>$val) //на всех паролях
{ //приводим к нижнему регистру и
$word=strtolower(trim($word)); //и обрезаем все лишнее
if ($val===md5($word)) //если хеши совпадают
{ //то присваиваем найденный пароль
$pass[$key]=$word; //специальному массиву с индексом массива $hash
unset($hash_tmp[$key]); //удаляем из массива расшифрованный хэш
$total--; //считаем сколько паролей осталось
if (!$total) break 2; //если не осталось, то выходим их всех циклов
}
}
}
if (is_array($pass)) //если найден хоть один пароль
foreach ($pass as $key=>$val) //то выводим на экран
{ //хэш и соответствующий ему пароль
echo $hash[$key]." - ".$pass[$key]."<br>";;
}
echo "Готово"; //вне зависимости от успеха, сообщаем об окончании перебора
?>
|
http://www.softtime.ru/info/task.php?id_article=75 | |
|
|
|
|
|
|
|
для: SoftTime
(09.02.2006 в 23:21)
| | Достаточно компактно, однако функция trim() лишняя, непонятно зачем удаляется расшифрованный хэш unset($hash_tmp[$key]);, зачем 2 в конце break 2; такие "хитрости" не увеличивают читабельности. | |
|
|
|
|
|
|
|
для: cheops
(12.02.2006 в 23:50)
| | >Достаточно компактно, однако функция trim() лишняя,
Я кажется знаю откуда ноги растут: пока выша ссылка была нерабочая, на форуме был выложен файл со словарем. И вот он имел не юниксовые переводы строк.
>непонятно зачем удаляется расшифрованный хэш
>unset($hash_tmp[$key]);,
чтобы исключить найденные пароли из перебора
<зачем 2 в конце break 2;
Выход из двух вложенных циклов | |
|
|
|
|
|
|
|
для: Loki
(13.02.2006 в 10:25)
| | >unset($hash_tmp[$key]);,
Это уже потом понял
<зачем 2 в конце break 2;
<Выход из двух вложенных циклов
Хитро, обычно метки используют - так код получается не очевидным... | |
|
|
|
|
|
|
|
для: cheops
(13.02.2006 в 13:57)
| | >так код получается не очевидным...
только если мануал не читать:))) это обычный синтаксис. Просто в реальных приложениях, в подобных случаях, как правило, используется функция и return. Вот никто его и не пользует. | |
|
|
|
|
|
|
|
для: Loki
(13.02.2006 в 14:19)
| | Я, например, такое сразу бы забыл по прочтению, чтобы не накроком не использовать, хороший тон требуется отказа от магических цифр... | |
|
|
|