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

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

 

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

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

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

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

<!-- задача номер 4 -->
<!-- Axill -->
<?php
  
// Будем время считать
  
function getmicrotime(){ 
    list(
$usec$sec) = explode(" "microtime()); 
    return ((float)
$usec + (float)$sec); 
  }
  
// Условия задачи 
  
$letters='qwertyuioplkjhgfdsazxcvbnm';
  
$pass[0]='ee11cbb19052e40b07aac0ca060c23ee';
  
$pass[1]='dd97813dd40be87559aaefed642c3fbb';
  
$pass[2]='8dbc672497bdc46f88e864bb1121232c';
  
$pass[3]='3e10f8c809242d3a0f94c18e7addb866';
  
// Функция определения одного пароля.
  // куча breakов обусловлена тем что я не знаю какая функция осуществляет принудительный выход 
  // из подпрограммы. Если такая функция код сокращается
  
function passw($letters,$pass){
    
$start=getmicrotime();
    
$fl=false;
    for(
$i=0;$i<=strlen($letters);$i++){
      if(
$fl) break;
      for(
$j=0;$j<=strlen($letters);$j++){
        if(
$fl) break;
        for(
$k=0;$k<=strlen($letters);$k++){
          if(
$fl) break;
          for(
$l=0;$l<=strlen($letters);$l++){
            if(
md5($letters[$i].$letters[$j].$letters[$k].$letters[$l])==$pass){
              
$ret.=$letters[$i].$letters[$j].$letters[$k].$letters[$l];
              
$ret.=' time:'.(getmicrotime()-$start);
              
$ret.='</br>';
              break;
              
$fl=false;
            }   
          }  
        }  
      }  
    }
    return 
$ret;
  }
  
// Считаем все сразу паролию. В последнем вложенном цикле проверяем на соответствие хеша паролю
  // Если соответствие найдено пароль удаляется из массива паролей, и дальше в переборе не участвует 
  
function allpassw($letters,$pass){
    
$start=getmicrotime();
    for(
$i=0;$i<=strlen($letters);$i++){
      for(
$j=0;$j<=strlen($letters);$j++){
        for(
$k=0;$k<=strlen($letters);$k++){
          for(
$l=0;$l<=strlen($letters);$l++){
            foreach(
$pass as $key=>$p){
              if(
md5($letters[$i].$letters[$j].$letters[$k].$letters[$l])==$p){
                
$ret.=$letters[$i].$letters[$j].$letters[$k].$letters[$l]."<br>";
                unset(
$pass[$key]);
              }
            }    
          }  
        }  
      }  
    }
    return 
$ret.' time:'.(getmicrotime()-$start);
  }  
  
  echo 
"<b>По одному<b><br>";
  
  echo 
passw($letters,$pass[0]);echo"<br>";
  echo 
passw($letters,$pass[1]);echo"<br>";
  echo 
passw($letters,$pass[2]);echo"<br>";
  echo 
passw($letters,$pass[3]);   
  
  echo 
"<br><b>Все сразу: </b><br>";
  echo 
allpassw($letters,$pass);
?>

Результаты:

По одному
user time:1.79323482513

igor time:2.00667405128

lena time:2.72851204872

atom time:4.87547087669

Все сразу: 
user
igor
lena
atom
time:12.6485140324


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

   
 
 автор: cheops   (08.02.2006 в 23:33)   письмо автору
 
   для: SoftTime   (06.02.2006 в 15:16)
 

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

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

Достаточно объемный код, но принцип ясен.
Если позволите несколько замечаний.

// куча breakов обусловлена тем что я не знаю какая функция осуществляет принудительный выход
 // из подпрограммы. Если такая функция код сокращается 

break(4) - в скобках уровень вложенности.

Скрипт позволяет лекго расширить диапозон символов, но не диапазон перебираемых слов. К тому же пропускаются слова 1,2,3-х буквенные. Явно в задании этого не было.
Скорость перебора достаточно высокая (сравнивая с другими)

   
Rambler's Top100
вверх

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