|
|
|
| Здесь выкладываем оценки и жалуемся как сложно было решать задачу :))) | |
|
|
|
|
|
|
|
для: cheops
(09.02.2006 в 00:20)
| | Сразу скажу, что некоторые участники присылали два решения - кто исправлял первое, кто выкладывал ещё один вариант - при публикации я ориентировался на последнее решение. В следующих задачах тоже можно вносить исправления - будет публиковаться последний вариант. | |
|
|
|
|
|
|
|
для: cheops
(09.02.2006 в 00:23)
| | Задача была не из простых, но у меня уже были мыслишки к этому времини, поэтому у меня небольшое преимущество. В первую очередь ставил универсальность (произвольные символы и длинна пароля, скорость перебора), приятно удивлен что не я один такой умный ;) Пришлость отказаться от рекурсии, так как по моим тестам она заметно медленее обычных циклов.
Завртра выложу тесты на своей машине с времинем работы. Буду использовать свои функции дабы сделать максимально чесно. Вот только от чисел на шарахайтесь (все будет в районе 30 секунд :))) | |
|
|
|
|
|
|
|
для: 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) используется рекурсия | |
|
|
|
|
|
|
|
для: cheops
(09.02.2006 в 00:48)
| | Я всё конечно не смотрел, но у меня 012 на 1 сек. быстреее 005. Т.е. 012 за 3.8 сек. всё находит. | |
|
|
|
|
|
|
|
для: Necro
(09.02.2006 в 04:49)
| | Я насколько понял, там выводится максимально большая цифра пароля... вообще подсчёт времени не очень очевиден и я сложил сумму отдельных результатов. | |
|
|
|
|
|
|
|
для: cheops
(09.02.2006 в 13:34)
| | Вылизать отчет терпения у меня не хватило. Сосредоточился на скорости.
Но складывать времена - это чересчур.12-й скрипт определяет пароли для всех хешей за один перебор.
Для каждого найденного пароля там выводится на какой секунде его нашли, и сколько паролей к этому моменту перебрали. Выводится и время всего перебора - если неопределившихся хешей не осталось - оно будет совпадать с самым последним.
Между прочим, количество хешей на входе практически не должно влиять на скорость перебора, поскольку цикла по хешам нет, сопоставление сразу всех хешей выполняется операцией isset(hashlist[$res']) , а её быстродействие определяется движком php (временем доступа к ассоциативному массиву по текстовому ключу ) , а вовсе не явным циклом по массиву с хешами.
И хотя при 4х хешах на входе это мало на что влияет, я полагаю, даже при 4 тысячах время возрастет слабо.
Я напорол в том, что результаты отчета стал выводить в таблицу (с неопределенной ширны столбцами) и браузер естественно рендеринг такой таблицы откладывает до завершения всего перебора. Потому и не видно, что времена не складываюстя, а накрываются самым сложным случаем (обычно - самым длинным паролем). | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2006 в 14:42)
| | Ну тогда перепрятушки :))) - у меня 3.2 секунды самый длинный пароль подбирался. | |
|
|
|
|
|
|
|
для: 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 - в нем минимум операторов, что, скорее всего, и дает такую скорость выполнения на интерпритаторе.
Все скрипты с едиными функциями для замера в архиве. | |
|
|
|
|
|
|
|
для: СерегаВЕБ
(09.02.2006 в 14:58)
| | 1) А что за столбец perl? Как вы его прикручивали к PHP?
2) Судя по цифрам PHP поставлен модулем? | |
|
|
|
|
|
|
|
для: cheops
(09.02.2006 в 16:08)
| | я так понял что "perl" и "php" - это пароли из четырех и из трех букв соотвественно:) | |
|
|
|
|
|
|
|
для: cheops
(09.02.2006 в 16:08)
| | perl и php это пароли, зашифрованные в md5. | |
|
|
|
|
|
|
|
для: 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
|
А что такого с цифрами? | |
|
|
|
|
|
|
|
для: 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 в 19:19)
| | Предлагаю каждому выбрать скрипт из представленных ниже, все они удовлетворяют следующим условиям, которое можно занести в примеры (ну решать все равно не мне, но услышать хоть общее мнение):
- свободный набор символов для перебора
- свободная длина пароля
По моему скромному мнению на это претендуют следующие решения: 007, 011, 012, 014. Если я кого обделил, можете добавить. | |
|
|
|
|
|
|
|
для: Artem S.
(09.02.2006 в 19:19)
| | Давайте скинемся и купим Artem S калькулятор помощнее.
Мой скрипт (013) - на моем компе (Athlon 1700+ 256Mb Apache/1.3.31 (Win32) PHP/5.0.2)
пароли ищет около 5 сек. у него же время стремится к бесконечности.
А я свою машину считаю уже престарелой. | |
|
|
|
|
|
|
|
для: PantiL
(09.02.2006 в 23:30)
| | В самом начале даны даные о машине, я предупредил что результаты будут шокирующими. Вы не уточнили какой ваш вариант. Учтите что я вставлял "случайных" хеш, к которому скрипт заведомо не подберет пароль. | |
|
|
|
|
|
|
|
для: Artem S.
(09.02.2006 в 23:42)
| | Я указал свой вариант - 013. Но все же странно что он ушел в неизмеримое пространство времени. На результатах у СерегаВЕБ мой скрипт находится в середине таблицы, а у Вас же скрипт номер 10 (лидер у СерегаВЕБ) тоже ушел в бесконечность :( | |
|
|
|
|
|
|
|
для: PantiL
(10.02.2006 в 00:06)
| | зато мой везде показывает одно время:))))))) | |
|
|
|
|
|
|
|
для: PantiL
(09.02.2006 в 23:30)
| | Как раз интересно как будут вести себя скрипты на процессорах с небольшой частотой, минимальным кэшем и не перегруженные лишними ухищрениями. | |
|
|
|
|