|
|
|
| Ответ 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 | |
|
|
|
|
|
|
|
для: SoftTime
(12.02.2006 в 21:09)
| | Оригинальный интерфейс скрипта, однако хэши вычисляются для каждого слова вычисляются по несколько раз для каждого из паролей - в то время как можно вычислить один раз. Нет досрочного выхода по нахождению всех паролей. | |
|
|
|