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

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

 

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

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

тема: Ответ 009 на задачу N 5
 
 автор: SoftTime   (10.02.2006 в 16:28)   письмо автору
 
 

Ответ 009 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
пароль "cluster ", хэш "06b2d4b91b5c9eaa8c20a1c270f95b3c".
пароль "Linux ", хэш "e206a54e97690cce50cc872dd70ee896".
пароль "Lisbon ", хэш "fbfa6902f089e5a0fa2424bd460ecfd0".
пароль "pyramid ", хэш "437233c74e25fe505293cd2e8ecc2696".
пароль "subprogram ", хэш "fb28e9240e83a5264566de844cc45523".

Общее время - 0,9 секунды, celeron-2,26 ГГц, 256 ОЗУ, WinXPSP2, Denwer


<?php
$code
=array(=> "fb28e9240e83a5264566de844cc45523",
            
=> "437233c74e25fe505293cd2e8ecc2696",
            
=> "06b2d4b91b5c9eaa8c20a1c270f95b3c",
            
=> "e206a54e97690cce50cc872dd70ee896",
            
=> "fbfa6902f089e5a0fa2424bd460ecfd0");//Задан массив с хэшами.
$donecount=0;                                        //Это - счетчик угаданных паролей. Пока что 0 ))
print "Began...<br />";
if (!
file_exists('linux.words')) die('no dictionary file'); //паранойя
$dic=fopen('linux.words''r');
while(
$pas=fgets($dic)){              //и покуда файла еще осталось и ответов меньше пяти...
   
$upas=md5(strtolower(trim($pas))); //сказано же - нижний регистр!
   
for ($t=1$t<=5$t++){           //Чтоб не крутить пять раз цикл с подбором пароля,
                                      //мы будем подбирать хэш к подобранному паролю,
                                      //а не наоборот.
   
if($upas===$code[$t]){             //И, если мы угадали, то:
      
print "пароль "$pas", хэш "$code[$t]".<br />";//1)Пишем ответ,
      
$donecount++;                                     //2)Запоминаем, что правильно угаданных
      
}                                                 //паролей стало на 1 больше.
   
}
}
fclose($dic);
print 
"Done!<br />";
//М. Голубев, aka DJ Paltus 16:30, 10.02.2006

?>


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

   
 
 автор: cheops   (13.02.2006 в 00:32)   письмо автору
 
   для: SoftTime   (10.02.2006 в 16:28)
 

Вот исходный вариант

<?php
$code
=array(=> "fb28e9240e83a5264566de844cc45523",
            
=> "437233c74e25fe505293cd2e8ecc2696",
            
=> "06b2d4b91b5c9eaa8c20a1c270f95b3c",
            
=> "e206a54e97690cce50cc872dd70ee896",
            
=> "fbfa6902f089e5a0fa2424bd460ecfd0");//Задан массив с хэшами.
$donecount=0;                                        //Это - счетчик угаданных паролей. Пока что 0 ))
print "Began...<br />";
if (!
file_exists('linux.words')) die('no dictionary file'); //паранойя
$dic=fopen('linux.words''r');
while(
$pas=fgets($dic)){              //и покуда файла еще осталось и ответов меньше пяти...
   
$upas=md5(strtolower(trim($pas))); //сказано же - нижний регистр!
   
for ($t=1$t<=5$t++){           //Чтоб не крутить пять раз цикл с подбором пароля,
                                      //мы будем подбирать хэш к подобранному паролю,
                                      //а не наоборот.
   
if($upas===$code[$t]){             //И, если мы угадали, то:
      
print "пароль \"$pas\", хэш \"$code[$t]\".<br />";//1)Пишем ответ,
      
$donecount++;                                     //2)Запоминаем, что правильно угаданных
      
}                                                 //паролей стало на 1 больше.
   
}
}
fclose($dic);
print 
"Done!<br />";
//М. Голубев, aka DJ Paltus 16:30, 10.02.2006

?>

   
 
 автор: cheops   (13.02.2006 в 00:34)   письмо автору
 
   для: cheops   (13.02.2006 в 00:32)
 

Очень компактное решение, прекрасно читается, однако можно было использовать функцию file(), которая бы позволила ускорить вычисления, так как память можно не экономить при полумегабайтном словаре.

   
 
 автор: DJ Paltus   (13.02.2006 в 01:26)   письмо автору
 
   для: cheops   (13.02.2006 в 00:34)
 

а я перед решением скачал файл словаря из FreeBSD с нашего рабочего сервера, так он весил почти 3 метра. Все под него написано было, а потом я обратил внимание на то, что ваша база в 6 раз меньше, и забил ее. Кстати, в моем большом файле двух паролей не нашлось )

   
Rambler's Top100
вверх

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