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

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

 

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

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

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

Ответ 002 на задачу N 4.
С условиями задачи можно ознакомится по ссылке.
Пароли:
Пароль №1: user
Пароль №2: igor
Пароль №3: lena
Пароль №4: atom

Время подбора:
14.7724061012

Код:

<?php

function timer()
{
 
$t=explode(' ',microtime());
 
$subtime=$t[1].substr($t[0], 1);
 return 
$subtime;
}

$total_start=timer();
?>
<html>

<head>
  <title>Подбор паролей</title>
</head>

<body bgcolor=silver>
<center>

<?php

// Начальные условия задачи
//-------------------
// Зашифрованные пароли
$crypted[1]="ee11cbb19052e40b07aac0ca060c23ee";
$crypted[2]="dd97813dd40be87559aaefed642c3fbb";
$crypted[3]="8dbc672497bdc46f88e864bb1121232c";
$crypted[4]="3e10f8c809242d3a0f94c18e7addb866";
// Максимальная длина пароля
$limit=4;
//-------------------

// Воспользуемся тем, что РНР работает с буквами так же, как с числами
//-----
// Формируем "максимальный" пароль
$char_limit="";
$c=1;
for ( ; 
$c <= $limit$c++)
{
 
$char_limit .= 'z';
}
// Для четырех символов будет zzzz.

$clear_start=timer();

$stop=false;
$i="a";
for ( ; 
$i <= $char_limit$i++)
{
 foreach(
$crypted as $key => $item)
         {
          if (
md5($i) == $item)
          {
           echo 
"Пароль №".$key.": ".$i.'<br>';
           unset(
$crypted[$key]); // удаляем найденный пароль из массива
           
if (empty($crypted))
               {
                
$stop=true// флаг прекращения внешнего цикла
                
break;
               }
          }
         }
 if (
$stop) break;
}

$end=timer();

$total=$end-$total_start;
$clear=$end-$clear_start;

?>

<p>
Всего времени (с инициализацией всех переменных): <?=$total?><br>
"Чистое" время (только брутфорс): <?=$clear?> <br>
На инициализацию потрачено: <?=$total-$clear?>

<center>

</body>

</html>


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

   
 
 автор: cheops   (08.02.2006 в 22:46)   письмо автору
 
   для: SoftTime   (06.02.2006 в 13:42)
 

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

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

Если чесно я сходу не понимаю как это скрипт работает =)
Комментарии по алгоритму были бы кстате.
И как отметил cheops, за идею перебора сразу всех паролей +1

   
Rambler's Top100
вверх

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