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

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

 

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

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

тема: Обсуждение задачи N 4
 
 автор: cheops   (09.02.2006 в 00:20)   письмо автору
 
 

Здесь выкладываем оценки и жалуемся как сложно было решать задачу :)))

   
 
 автор: cheops   (09.02.2006 в 00:23)   письмо автору
 
   для: cheops   (09.02.2006 в 00:20)
 

Сразу скажу, что некоторые участники присылали два решения - кто исправлял первое, кто выкладывал ещё один вариант - при публикации я ориентировался на последнее решение. В следующих задачах тоже можно вносить исправления - будет публиковаться последний вариант.

   
 
 автор: Artem S.   (09.02.2006 в 00:32)   письмо автору
 
   для: cheops   (09.02.2006 в 00:23)
 

Задача была не из простых, но у меня уже были мыслишки к этому времини, поэтому у меня небольшое преимущество. В первую очередь ставил универсальность (произвольные символы и длинна пароля, скорость перебора), приятно удивлен что не я один такой умный ;) Пришлость отказаться от рекурсии, так как по моим тестам она заметно медленее обычных циклов.

Завртра выложу тесты на своей машине с времинем работы. Буду использовать свои функции дабы сделать максимально чесно. Вот только от чисел на шарахайтесь (все будет в районе 30 секунд :)))

   
 
 автор: cheops   (09.02.2006 в 00:48)   письмо автору
 
   для: cheops   (09.02.2006 в 00:20)
 

Читабельность выставлят от 0 до 5, тонкости, сколько начитаю, оригинальность на сколько понравилось, если не мог получить результат ставил единицу, если очень нравился скрипт - 5. Время привожу общее, на подбор всех паролей, если они в куче считаются - привожу время кучи, если по отдельности - их сумму, для теста использовался компьютер P IV (presscot) под управлением Windows XP SP2, Apache 1.3.33, PHP 5.0.4 (установлен как CGI).
_N   чит тонкс оригн общ.вр (сек)
001   3    1     3     22
002   2    3     5      7
003   4    1     1      -
004   5    3     3     10 
005   5    2     5      4
006   3    2     3      8
007   4    3     5      7
008   5    0     4     21
009   3    2     3      8
010   5    3     4      6
011   3    4     4      7
012   3    6     5      7
013   1    2     2     21
014   5    3     3     69


001 (1) скрипт учитывает время выполнения,
(1) нет вложенных циклов, по числу символов

002 (1) скрипт учитывает время выполнения,
(1) нет вложенных циклов, по числу символов,
(1) пароли считаются все вместе

003 (1) скрипт учитывает время выполнения

004 (1) скрипт учитывает время выполнения,
(1) диапазон символов легко расширяется,
(1) пароли считаются все вместе

005 (1) нет вложенных циклов, по числу символов,
(1) пароли считаются все вместе

006 (1) пароли считаются все вместе,
(1) диапазон символов легко расширяется

007 (1) диапазон символов легко расширяется
(1) нет вложенных циклов, по числу символов
(1) используется рекурсия

008 -

009 (1) скрипт учитывает время выполнения,
(1) диапазон символов легко расширяется

010 (1) скрипт учитывает время выполнения,
(1) нет вложенных циклов, по числу символов,
(1) пароли считаются все вместе

011 (1) используется set_time_limit,
(1) скрипт учитывает время выполнения,
(1) нет вложенных циклов, по числу символов,
(1) диапазон символов легко расширяется

012 (1) бонусный балл за юзабилити и удобство использования,
(1) учитывается пустой пароль,
(1) скрипт учитывает время выполнения,
(1) нет вложенных циклов, по числу символов,
(1) пароли считаются все вместе,
(1) диапазон символов легко расширяется

013 (1) нет вложенных циклов, по числу символов,
(1) диапазон символов легко расширяется

014 (1) используется set_time_limit,
(1) диапазон символов легко расширяется,
(1) используется рекурсия

   
 
 автор: Necro   (09.02.2006 в 04:49)   письмо автору
 
   для: cheops   (09.02.2006 в 00:48)
 

Я всё конечно не смотрел, но у меня 012 на 1 сек. быстреее 005. Т.е. 012 за 3.8 сек. всё находит.

   
 
 автор: cheops   (09.02.2006 в 13:34)   письмо автору
 
   для: Necro   (09.02.2006 в 04:49)
 

Я насколько понял, там выводится максимально большая цифра пароля... вообще подсчёт времени не очень очевиден и я сложил сумму отдельных результатов.

   
 
 автор: Trianon   (09.02.2006 в 14:42)   письмо автору
 
   для: cheops   (09.02.2006 в 13:34)
 

Вылизать отчет терпения у меня не хватило. Сосредоточился на скорости.
Но складывать времена - это чересчур.12-й скрипт определяет пароли для всех хешей за один перебор.
Для каждого найденного пароля там выводится на какой секунде его нашли, и сколько паролей к этому моменту перебрали. Выводится и время всего перебора - если неопределившихся хешей не осталось - оно будет совпадать с самым последним.

Между прочим, количество хешей на входе практически не должно влиять на скорость перебора, поскольку цикла по хешам нет, сопоставление сразу всех хешей выполняется операцией isset(hashlist[$res']) , а её быстродействие определяется движком php (временем доступа к ассоциативному массиву по текстовому ключу ) , а вовсе не явным циклом по массиву с хешами.

И хотя при 4х хешах на входе это мало на что влияет, я полагаю, даже при 4 тысячах время возрастет слабо.

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

   
 
 автор: cheops   (09.02.2006 в 14:56)   письмо автору
 
   для: Trianon   (09.02.2006 в 14:42)
 

Ну тогда перепрятушки :))) - у меня 3.2 секунды самый длинный пароль подбирался.

   
 
 автор: СерегаВЕБ   (09.02.2006 в 14:58)   письмо автору
 
   для: Necro   (09.02.2006 в 04:49)
 

Тест скриптов на WinXP, 1.8GHz, Apache 2.0.55(Win32), PHP 5.1.2.2

Тестировался четырехзначный пароль: f83a0aa1f9ca0f7dd5994445ba7d9e80
трехзначный: e1bfd762321e409cee4ac0b6e841963c
с символами вне диапозона a-z: 713ff7abce2ef30fc4f532bb68e92a1b

Результаты, отсортированные по четырехзначному паролю, время в секундах:

          perl             php        подсказка
011    2,191555023    0,12758708    да
010    3,055837154    0,120023966    да
009    3,31056118    0,122475863    да
002    3,379901886    0,136214972    да
006    3,40474391    3,428192854    да
012    3,545851946    0,185280085    да
007    3,679920912    3,715461969    да
001    3,806249857    3,814942122    да
008    3,94299221    N/A                       да
013    5,137140989    0,199837923    да
005    5,406397104    0,238840103    да
003    6,217120886    0,218867064    да
004    7,256643772    7,250847816    да
014    20,99414682    21,46167421    да


По трехзначному:

          perl             php        подсказка
010    3,055837154    0,120023966    да
009    3,31056118    0,122475863    да
011    2,191555023    0,12758708    да
002    3,379901886    0,136214972    да
012    3,545851946    0,185280085    да
013    5,137140989    0,199837923    да
003    6,217120886    0,218867064    да
005    5,406397104    0,238840103    да
006    3,40474391    3,428192854    да
007    3,679920912    3,715461969    да
001    3,806249857    3,814942122    да
004    7,256643772    7,250847816    да
014    20,99414682    21,46167421    да
008    3,94299221    N/A                       да


Самыми быстрыми оказались 011 и 010. Мне больше всех понравился 010 - в нем минимум операторов, что, скорее всего, и дает такую скорость выполнения на интерпритаторе.

Все скрипты с едиными функциями для замера в архиве.

   
 
 автор: cheops   (09.02.2006 в 16:08)   письмо автору
 
   для: СерегаВЕБ   (09.02.2006 в 14:58)
 

1) А что за столбец perl? Как вы его прикручивали к PHP?
2) Судя по цифрам PHP поставлен модулем?

   
 
 автор: Loki   (09.02.2006 в 16:35)   письмо автору
 
   для: cheops   (09.02.2006 в 16:08)
 

я так понял что "perl" и "php" - это пароли из четырех и из трех букв соотвественно:)

   
 
 автор: СерегаВЕБ   (09.02.2006 в 19:47)   письмо автору
 
   для: cheops   (09.02.2006 в 16:08)
 

perl и php это пароли, зашифрованные в md5.

   
 
 автор: СерегаВЕБ   (09.02.2006 в 21:11)   письмо автору
 
   для: cheops   (09.02.2006 в 16:08)
 

2) Модули как раз че то не подключаются у меня. В http.conf так:

AddType application/x-httpd-php phtml php
#LoadModule php5_module D:/Program Files/PHP/php5apache2.dll
 
<Directory "D:/Program Files/PHP"> 
  Options ExecCGI 
</Directory> 
ScriptAlias "/php_dir/" "D:/Program Files/PHP/" 
Action application/x-httpd-php "/php_dir/php-cgi.exe"
#LoadModule php5_module c:/PHP/php5ts.dll

А что такого с цифрами?

   
 
 автор: Artem S.   (09.02.2006 в 19:19)   письмо автору
 
   для: cheops   (09.02.2006 в 00:20)
 

Выкладываю свои оценки, пока половину, остальную позже. В первую очередь ставил универсальность скриптов. За "Читаемость" ставил выше, если он не содержит "хитрых" путей, и все предельно ясно, при этом объем кода не учитывал (постороний код: вывод инфы, подготовка). За "ориг" вычетал из 5 за ошибки в алгоритме по моему мнению (ниже приведены комментарии).
Скорость мерил 3 раза для объективности, учет времини происходил по "левому" паролю (обеспечивает полные проход по всем значениям), при этом если подбор идет по нескольким паролям сразу искуственно подставлялся один (минимльными исправлениями)

Машина
Celeron 633
Linux Ubuntu 5.10
php 5.0.5 (cli)

001 ----- 24.2144229412 ----- 24.3934569359 ----- 23.9009611607
- 1. Вложенные циклы
- 2. Ограниченный набор символов
- 3. Ограниченная длинна пароля
- 4. Холостой ход в случае соответсвия пароля
+ 5. Учет времини
Читаимость - 4
Тонкость - 1
Оригинальность - 1
002 ----- 34.5492448807 ----- 34.8780069351 ----- 34.6087460518
- 1. Ограниченный набор символов
+ 2. Учет времини
+ 3. Перебор сразу всех паролей
Читаимость - 4
Тонкость - 2
Оригинальность - 3
003 ----- 42.5249838829 ----- 41.8854820728 ----- 42.0972561836
- 1. Вложенные циклы
- 2. Ограниченный набор символов
- 3. Ограниченная длинна пароля
+ 4. Учет времини
Читаимость - 3
Тонкость - 1
Оригинальность - 2
004 ----- 26.9835119247 ----- 26.535171032 ----- 26.5778121948
- 1. Вложенные циклы
- 2. Ограниченная длинна пароля
+ 3. Учет времини
Читаимость - 4
Тонкость - 1
Оригинальность - 3
005 ----- 20.4928231239 ----- 20.3921759129 ----- 22.1307229996
- 1. Ограниченный набор символов
+2. Перебор сразу всех паролей
Читаимость - 5
Тонкость - 1
Оригинальность - 3
006 ----- 23.8476700783 ----- 24.1365549564 ----- 24.5198919773
- 1. Вложенные циклы
- 2. Ограниченная длинна пароля
Читаимость - 2
Тонкость - 0
Оригинальность - 3
007 ----- 22.4538419247 ----- 23.0619039536 ----- 24.3889889717
+1. Рекурсия
Читаимость - 4
Тонкость - 1
Оригинальность - 5
008 ----- 25.3296830654 ----- 25.3244152069 ---- 25.1617188454
- 1. Вложенные циклы
- 2. Ограниченный набор символов
- 3. Ограниченная длинна пароля
- 4. Холостой ход в случае соответсвия пароля
Читаимость - 4
Тонкость - 1
Оригинальность - 1
009 ----- 22.9724459648 ----- 23.4558110237 ----- 23.1598501205
- 1. Вложенные циклы
- 2. Ограниченная длинна пароля
+3 Учет времини.
Читаимость - 2
Тонкость - 1
Оригинальность - 3
010 ----- N/A ---- N/A ----- N/A
(скрипт уходил в цикл и не выходил)
- 1. Ограниченный набор символов
+ 2. Учет времини
Читаимость - 5
Тонкость - 1
Оригинальность - 4
011 ----- 19.757668972 ----- 19.3110768795 ----- 19.7464270592
+ 1. Учет времини
Читаимость - 4
Тонкость - 1
Оригинальность - 5
012 ----- 21.4443631172 ----- 22.0969209671 ----- 21.4085280895
+ 1. Учет времини
+ 2 . Рекурсия
+ 3. Учет пустого пароля
+ 4. За интерфейс
Читаимость - 1
Тонкость - 4
Оригинальность - 5
013 ----- N/A ----- N/A ----- N/A
-1. За использование класса, это пагубно сказалось на скорость
-1. За while(1)
Читаимость - 2
Тонкость - 0
Оригинальность - 3
014 ----- 81.230604887 ----- 84.9744670391 ----- 83.3757039301
+ 1. Рекурсия
Читаимость - 5
Тонкость - 1
Оригинальность - 5

P.S. Там где N/A скрипт или очень долго выполняется либо уходит в бесконечный цикл, а воощем можно заменить это на 30 сек - как максимальное время выполнения, не зависищяе от железа.

   
 
 автор: Artem S.   (09.02.2006 в 23:00)   письмо автору
 
   для: Artem S.   (09.02.2006 в 19:19)
 

Предлагаю каждому выбрать скрипт из представленных ниже, все они удовлетворяют следующим условиям, которое можно занести в примеры (ну решать все равно не мне, но услышать хоть общее мнение):
- свободный набор символов для перебора
- свободная длина пароля
По моему скромному мнению на это претендуют следующие решения: 007, 011, 012, 014. Если я кого обделил, можете добавить.

   
 
 автор: PantiL   (09.02.2006 в 23:30)   письмо автору
 
   для: Artem S.   (09.02.2006 в 19:19)
 

Давайте скинемся и купим Artem S калькулятор помощнее.
Мой скрипт (013) - на моем компе (Athlon 1700+ 256Mb Apache/1.3.31 (Win32) PHP/5.0.2)
пароли ищет около 5 сек. у него же время стремится к бесконечности.
А я свою машину считаю уже престарелой.

   
 
 автор: Artem S.   (09.02.2006 в 23:42)   письмо автору
 
   для: PantiL   (09.02.2006 в 23:30)
 

В самом начале даны даные о машине, я предупредил что результаты будут шокирующими. Вы не уточнили какой ваш вариант. Учтите что я вставлял "случайных" хеш, к которому скрипт заведомо не подберет пароль.

   
 
 автор: PantiL   (10.02.2006 в 00:06)   письмо автору
 
   для: Artem S.   (09.02.2006 в 23:42)
 

Я указал свой вариант - 013. Но все же странно что он ушел в неизмеримое пространство времени. На результатах у СерегаВЕБ мой скрипт находится в середине таблицы, а у Вас же скрипт номер 10 (лидер у СерегаВЕБ) тоже ушел в бесконечность :(

   
 
 автор: P@Sol   (10.02.2006 в 16:54)   письмо автору
 
   для: PantiL   (10.02.2006 в 00:06)
 

зато мой везде показывает одно время:)))))))

   
 
 автор: cheops   (10.02.2006 в 13:28)   письмо автору
 
   для: PantiL   (09.02.2006 в 23:30)
 

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

   
Rambler's Top100
вверх

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