Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 004 на задачу N 5
 
 автор: SoftTime   (09.02.2006 в 23:21)   письмо автору
 
 

Ответ 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

   
 
 автор: cheops   (12.02.2006 в 23:50)   письмо автору
 
   для: SoftTime   (09.02.2006 в 23:21)
 

Достаточно компактно, однако функция trim() лишняя, непонятно зачем удаляется расшифрованный хэш unset($hash_tmp[$key]);, зачем 2 в конце break 2; такие "хитрости" не увеличивают читабельности.

   
 
 автор: Loki   (13.02.2006 в 10:25)   письмо автору
 
   для: cheops   (12.02.2006 в 23:50)
 

>Достаточно компактно, однако функция trim() лишняя,
Я кажется знаю откуда ноги растут: пока выша ссылка была нерабочая, на форуме был выложен файл со словарем. И вот он имел не юниксовые переводы строк.

>непонятно зачем удаляется расшифрованный хэш
>unset($hash_tmp[$key]);,
чтобы исключить найденные пароли из перебора

<зачем 2 в конце break 2;
Выход из двух вложенных циклов

   
 
 автор: cheops   (13.02.2006 в 13:57)   письмо автору
 
   для: Loki   (13.02.2006 в 10:25)
 

>unset($hash_tmp[$key]);,
Это уже потом понял

<зачем 2 в конце break 2;
<Выход из двух вложенных циклов
Хитро, обычно метки используют - так код получается не очевидным...

   
 
 автор: Loki   (13.02.2006 в 14:19)   письмо автору
 
   для: cheops   (13.02.2006 в 13:57)
 

>так код получается не очевидным...
только если мануал не читать:))) это обычный синтаксис. Просто в реальных приложениях, в подобных случаях, как правило, используется функция и return. Вот никто его и не пользует.

   
 
 автор: cheops   (13.02.2006 в 16:41)   письмо автору
 
   для: Loki   (13.02.2006 в 14:19)
 

Я, например, такое сразу бы забыл по прочтению, чтобы не накроком не использовать, хороший тон требуется отказа от магических цифр...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования