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

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

 

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

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

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

Ответ 014 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
<!-- Задача N5-->
<!-- neudor -->

<!--
Я позаимствовал идею со введением паролей через textarea у автора задачи №12.
Для успешной работы скрипта необходим наличие в одной с ним директории файлов
"linux.words" и "words". А чтобы найти ВСЕ 5 паролей, нужен именно "linux.words"

Мои наблюдения:
В процедуре сравнения использование "===" вместо "==" дает выигрыш во времени
примерно на 10%.
Использование foreach для перебора массивов намного быстрее for(;;).
-->

<!-- begin of brute_wordlist.php-->

<?php
echo "
<html>
<body>
<font face=Courier>
  <form method=post action=
$_SERVER[PHP_SELF]>
  
  <b>Wordlist:</b> <br>
  <select name=wordlist>
  <option>linux.words
  <option>words
  </select>
  <br><br>
  
  <b>Words case to check:</b><br>
  <input type=radio name=case value=trim> Normal<br>
  <input type=radio name=case value=strtolower checked> Lower<br>
  <input type=radio name=case value=strtoupper> Upper<br>
  <br>
  
  <b>Hashes (md5):</b><br>
  <textarea cols=40 rows=10 name=hashes
/>fb28e9240e83a5264566de844cc45523
437233c74e25fe505293cd2e8ecc2696
06b2d4b91b5c9eaa8c20a1c270f95b3c
e206a54e97690cce50cc872dd70ee896
fbfa6902f089e5a0fa2424bd460ecfd0</textarea>
  <br><input type=submit name=go value='GO'/>
  
</form>
"
;

function 
gettime() //Формируем строку времени
{
  
$tmp_time explode' 'microtime() );
  
$time $tmp_time[1].substr($tmp_time[0],1);
  return 
$time;
}

if( !isset(
$_POST['go']) ) exit; //если не была запущена форма, ничего не делаем

set_time_limit(0); //Неограниченное время выполнения скрипта

$path $_POST['wordlist']; //Путь к используемому файлу
$hashes explode"
"
$_POST['hashes'] ); //Массив паролей
$func $_POST['case']; //Перевод символов в нижний/верхний/родной регистр

for($i=0$i<count($hashes); $i++){ $hashes[$i]=trim($hashes[$i]); }

$file=file($path); //Читаем файл в массив

$start=gettime(); //Начало перебора

foreach($file as $value)
{
    
$value=trim($value); //Убиваем пробелы
    
$value=$func($value); // strtolower/strtoupper/trim

    
foreach($hashes as $key=>$hash//Сравниваем каждый пароль из массива hashes
    
{                               //с текущим словом из файла
        
if( md5($value)===$hash )
        {
            echo 
"$hash = $value<br>"//Если имеем совпадение, выводим его
            
unset($hashes[$key]); //и исключаем из массива поиска
            
break;
        }
    }
}

$end=gettime(); //Конец скрипта
$time=$end-$start//Время выполнения
echo "<br>$time";

echo 
"<br><br><b>Not found:</b><pre>"//Вывод ненайденных паролей
print_r($hashes);

?>
<!-- end of brute_wordlist.php-->
<!--
Зашифрованные слова:
06b2d4b91b5c9eaa8c20a1c270f95b3c = cluster
e206a54e97690cce50cc872dd70ee896 = linux
fbfa6902f089e5a0fa2424bd460ecfd0 = lisbon
437233c74e25fe505293cd2e8ecc2696 = pyramid
fb28e9240e83a5264566de844cc45523 = subprogram

Время поиска: 2.3 сек.
-->


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

   
 
 автор: cheops   (13.02.2006 в 00:48)   письмо автору
 
   для: SoftTime   (12.02.2006 в 21:09)
 

Оригинальный интерфейс скрипта, однако хэши вычисляются для каждого слова вычисляются по несколько раз для каждого из паролей - в то время как можно вычислить один раз. Нет досрочного выхода по нахождению всех паролей.

   
Rambler's Top100
вверх

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