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

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

 

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

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

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

Ответ 012 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
Пароли:
Пароль №1: subprogram
Пароль №2: pyramid
Пароль №3: cluster
Пароль №4: linux
Пароль №5: lisbon

Время работы:
2.5148191452 с

Решение:


<?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]="fb28e9240e83a5264566de844cc45523";
$crypted[2]="437233c74e25fe505293cd2e8ecc2696";
$crypted[3]="06b2d4b91b5c9eaa8c20a1c270f95b3c";
$crypted[4]="e206a54e97690cce50cc872dd70ee896";
$crypted[5]="fbfa6902f089e5a0fa2424bd460ecfd0";

// Количество паролей (для контроля в дальнейшем)
$count=count($crypted);

// Проверяем наличие и "непустоту" файла
if (!@file_exists('linux.words') || @filesize('linux.words') == 0)
     die(
"Отсутствует словарь <tt>linux.words</tt>. Работа остановлена");

// Считываем из файла в массив
$passwords=file('linux.words');

// начало отсчета "чистого" времени
$clear_start=timer();

foreach (
$passwords as $pass)
{
 foreach (
$crypted as $key => $item// проверяеем все пароли сразу
 
{
  if (
md5(strtolower(trim($pass))) == $item// trim'ом обрезается
                                             // конец строки (
)
                                             
// strtolower - из условия
                                             // (все в нижнем регистре)
  
{
   
$uncrypted[$key]=strtolower($pass); // создаем массив найденных паролей
                              // (в нижнем регистре)
   
unset($crypted[$key]); // удаляем найденный пароль из перебора
   
if (empty($crypted)) break(2); // все найдено; прекращаем работу
  
}
 }
}

// Конец "чистого" времени
$clear_end=timer();

//---------------
// Обрабатываем исключительные ситуации
// Ни один пароль не расшифрован
if (!isset($uncrypted) || empty($uncrypted))
die(
"<p style=color:red> Ни один пароль не расшифрован!<p>");

// Расшифровали, но не все; выводим предупреждение
if ($count != count($uncrypted))
{
    echo 
"<p style=color:red> Внимание! Осталось нерасшифровано: ";
    echo  
$count count($uncrypted);
    echo 
"</p>";
}
//---------------

ksort($uncrypted); // Для красоты сортируем по ключам и выводим
foreach($uncrypted as $num => $unc)
{
 echo 
"Пароль №".$num.": ".$unc."<br>";
}

// Конец общего времени
$end=timer();

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

?>

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

</body>
</html>


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

   
 
 автор: cheops   (13.02.2006 в 00:19)   письмо автору
 
   для: SoftTime   (10.02.2006 в 21:59)
 

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

   
Rambler's Top100
вверх

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