|
|
|
| Ответ 006 на задачу N 5.
С условиями задачи можно ознакомится по ссылке.
Мой второй вариан (первый был небольшой ошибкой) . Второй вариант немного по лучше.
password3 = cluster hesh = 06b2d4b91b5c9eaa8c20a1c270f95b3c
password4 = linux hesh = e206a54e97690cce50cc872dd70ee896
password5 = lisbon hesh = fbfa6902f089e5a0fa2424bd460ecfd0
password2 = pyramid hesh = 437233c74e25fe505293cd2e8ecc2696
password1 = subprogram hesh = fb28e9240e83a5264566de844cc45523
time=0.977846 s.
<?
$server_dic = "linux.words"; // Словарь на сервере.
?>
<html>
<head><title>пороль по словарю</title></head>
<body>
<!-- Форма для выбора словаря. --!>
<form enctype='multipart/form-data' name=form action="slovo.php" method=post>
<br>Выберите словарь по которому будет осуществляться подбор</br>
Если ничего не выбрано, будет использоватся словарь сервера <?echo $server_dic?>
<br>
<br><input type=file name="slovar"></br>
<br><input name="knop" type="submit" value="Искать">
</form>
<?
if (isset($_POST['knop'])) // Т.е. нажата кнопка.
{
function gettime() // Функция подсчёта времени.
{
$part_time = explode(' ',microtime());
$real_time = $part_time[1].substr($part_time[0],1);
return $real_time;
}
$start_time = gettime();// Начальное время
$hesh[1] = "fb28e9240e83a5264566de844cc45523"; // Наши хеши.
$hesh[2] = "437233c74e25fe505293cd2e8ecc2696";
$hesh[3] = "06b2d4b91b5c9eaa8c20a1c270f95b3c";
$hesh[4] = "e206a54e97690cce50cc872dd70ee896";
$hesh[5] = "fbfa6902f089e5a0fa2424bd460ecfd0";
if (!empty($_FILES['slovar']['tmp_name'])) // Если на сервер передавался словарь,
{$file_name = $_FILES['slovar']['tmp_name'];} // то будем работать с его временной копией.
else // Если нет,
{
if (is_file($server_dic)) // проверяем существование словаря на сервере,
{
echo "Словарь не был передан, по-этому был исполбзован словарь $server_slovar<br><br>";
$file_name = $server_dic; // работаем с ним.
}
else {echo "Словарь не передан, словарь сервера $server_slovar не обнаружен<br>";exit;}
}
$file_array = file($file_name); // Загоняем весь словарь в массив.
if(!$file_array) {echo("Ошибка открытия файла<br>");exit;}
$cou = count($file_array); // Выесняем кол-во элементов массива.
for($i=0; $i < $cou; $i++)
{
$file_array[$i] = rtrim($file_array[$i]); // Удаляем переводы строк.
}
for ($i = 0; $i <= $cou; $i++) // Перебор массива строк.
{
$h = md5(strtolower($file_array[$i])); // Переводим слово в нижний регистр, вычисляем хеш.
// Используем foreach т.к. кол-во элементов массива будет меняться.
foreach ($hesh as $key => $val)
{
if ($h === $val)
{
echo "password$key = ".strtolower($file_array[$i])." hesh = ".$val."<br>";
// Уничтожаем из массива хешей найденый хеш, чтобы сократить кол-во проходов цикла
unset ($hesh[$key]);
break;
}
}
}
// Уничтожаем временный файл, если он есть.
if (!empty($_FILES['slovar']['tmp_name'])) {unlink($_FILES['slovar']['tmp_name']);}
$stop_time = gettime(); // Конечное время.
echo "time=".(bcsub($stop_time,$start_time, 6))." s."; // Выводим время работы скрипта.
}
?>
</body></html>
|
http://www.softtime.ru/info/task.php?id_article=75 | |
|
|
|
|
|
|
|
для: SoftTime
(10.02.2006 в 02:54)
| | Хм... немного громоздко, складывается впечатление о лишних пассах. Цикл
<?php
for($i=0; $i < $cou; $i++)
{
$file_array[$i] = rtrim($file_array[$i]); // Удаляем переводы строк.
}
?>
|
совершенно лишний, так как словарь из Linux и \r в конце слов отсутствует. | |
|
|
|
|
|
|
|
для: cheops
(12.02.2006 в 23:41)
| | Перевод строки в этом словаре точно есть (во всяком случае в том что я скачал). У меня без этого цикла вообще паролей не находит. | |
|
|
|
|
|
|
|
для: Necro
(13.02.2006 в 00:08)
| | Да с этим заявлением я погорячился, однако нет досрочного выхода, если все пароли найдены. | |
|
|
|