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

Форум PHP

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

 

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

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

тема: Вопрос из самоучителя "Головоломки на ПХП для хакера". Помогите пожалуйста разобратся...
 
 автор: jeans1986   (13.11.2006 в 13:25)   письмо автору
 
 

Это скрипт подбирает пароли которые состоят не более чем из 4 букв латинского алфавита.
Я не понял как работает рекурсия (то что отмечено жирным). Как я понял она работает так: сначала проверяется буква а->aa->aaa->aaaa и.д Обьяните пожалуйста как этот работает. Заранее благодарю.


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

//Читаем пароли из файла password
$pass = file("password");
foreach($pass as $password)
{
// Замеряем время, затраченное на подбор пароля
$begin = time();
echo decrypt_md5(trim($password),"");
$end = time();
echo " (на подбор затрачено ".($end - $begin)." секунд) <br>";
}

// Функция посимвольного перебора пароля
// $pass - расшифровываемый пароль
// $answer - текущий ответ, при первом вызове - пустая строка
function decrypt_md5($pass, $answer)
{
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','x','y','z');
// Будем считать, что пароль не превышает
// 4 символов
$max_number = 3;
if(strlen($answer) > $max_number) return;

for($j = 0; $j < count($arr); $j++)
{
$temp = $answer.$arr[$j];
if(md5($temp) == $pass) return $temp;
// Рекурсивно вызываем фукнцию для увеличения
// длины подбираемого пароля
$result = decrypt_md5($pass, $temp);
// Если функция возвращает не пустую строку
// следовательно найден ответ и дальше искать
// не следует
if(strlen($result) > 0) return $result;
}

}
?>

   
 
 автор: kasmanaft   (13.11.2006 в 14:22)   письмо автору
 
   для: jeans1986   (13.11.2006 в 13:25)
 

А вы выводите этот $temp и смотрите как оно работает

for($j = 0; $j < count($arr); $j++) 

$temp = $answer.$arr[$j]; 
echo $temp."<br>";
if(md5($temp) == $pass) return $temp; 
// Рекурсивно вызываем фукнцию для увеличения 
// длины подбираемого пароля 
$result = decrypt_md5($pass, $temp); 
// Если функция возвращает не пустую строку 
// следовательно найден ответ и дальше искать 
// не следует 
if(strlen($result) > 0) return $result; 
}

В алфавите буквы 'q' и 'w' пропущены ...

   
Rambler's Top100
вверх

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