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

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

 

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

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

тема: Ответ 005 на задачу N 4
 
 автор: SoftTime   (06.02.2006 в 19:55)   письмо автору
 
 

Ответ 005 на задачу N 4.
С условиями задачи можно ознакомится по ссылке.

<?php
$code
=array(=> "ee11cbb19052e40b07aac0ca060c23ee",
            
=> "dd97813dd40be87559aaefed642c3fbb",
            
=> "8dbc672497bdc46f88e864bb1121232c",
            
=> "3e10f8c809242d3a0f94c18e7addb866");//Задан массив с хэшами.
$i="a";                                              //Даем стартовое значение для $i, чтоб было ясно, что оно - char.
$donecount=0;                                        //Это - счетчик угаданных паролей. Пока что 0 ))
print "Began...<br />";
do{
   
$i++;                                             //Увеличиваем $i.
   
$k=md5($i);                                       //Это - проверочный хэш.
   
for ($t=1$t<=4$t++){                          //Чтоб не крутить четыре раза цикл с подбором пароля,
                                                     //мы будем подбирать хэш к подобранному паролю,
                                                     //а не наоборот.
      
if($k===$code[$t]){                            //И, если мы угадали, то:
         
print "пароль "$i", хэш "$code[$t]".<br />";//1)Пишем ответ,
         
$donecount++;                                   //2)Запоминаем, что прравильно угаданных
                                                         //паролей стало на 1 больше.
         
}
      }
   }
while (
$i!=="zzzz" and $donecount!==4); //"zzzz" - максимальное значение для $i из четырех символов.
                                        //А если мы угадали 4 пароля - зачем крутить цикл дальше?
print "Done!";
//М. Голубев, aka DJ Paltus 19:54, 06.02.2006


?>


http://www.softtime.ru/info/task.php?id_article=74

   
 
 автор: cheops   (08.02.2006 в 23:35)   письмо автору
 
   для: SoftTime   (06.02.2006 в 19:55)
 

Очень компактно, и понятно. Пароли перебираются в куче, отсутствуют вложенные циклы и очень всё быстро. Правда не очевидно как можно просто расширить диапазон символов. Очень понравилось, у меня решение более громоздкое и менее универсальное.

PS Ошибка опять моих рук дело, постарюсь исправить к следующей версии уже наверняка :)))

   
 
 автор: Artem S.   (08.02.2006 в 23:53)   письмо автору
 
   для: SoftTime   (06.02.2006 в 19:55)
 

Никакой универсальности, зато "дешево, надежно и практично" =)

   
 
 автор: DJ Paltus   (09.02.2006 в 00:06)   письмо автору
 
   для: Artem S.   (08.02.2006 в 23:53)
 

вы не заметили одной моей оплошности.
если пароль будет "а", то не подберется, так как значение $i сходу увеличивается до "b".

   
 
 автор: Necro   (09.02.2006 в 04:05)   письмо автору
 
   для: SoftTime   (06.02.2006 в 19:55)
 

Объясните мне почему if($k===$code[$t]) работает ощутимо быстрее чем if($k==$code[$t])?
В off line учебнике РНР ничего такого нет.

   
 
 автор: cheops   (09.02.2006 в 13:32)   письмо автору
 
   для: Necro   (09.02.2006 в 04:05)
 

PHP в случае === не выполняет приведение типов, а сравнивает значения как есть.

   
Rambler's Top100
вверх

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