Подбор паролей на D

Apr 09, 2015 19:17

Увидел на днях у afiskon'a гостевой пост с реализацией на Go игрушечной задачки про подбор пароля по его MD5 хэшу. По условию в пароле 5 символов из алфавита 0..9a..z, перебор надо распараллелить по ядрам. Там же есть ссылки на предыдущие инкарнации (на хаскеле и эрланге), в них я сейчас не вчитывался. А еще тот же пост увидел eao197 и сделал свой Read more... )

d

Leave a comment

Comments 44

formerchild April 9 2015, 13:27:07 UTC
Тут надо учесть, что все суслики пользуются go fmt, что резко увеличивает количество строк за счет форматирования. Если бы был аналогично устроенный d fmt, у Вас тоже строк было бы побольше.

Reply

thedeemon April 9 2015, 15:29:35 UTC
Да, верно, у меня код плотнее напихан. Плюс еще угол срезал, не стал выносить генерацию заданий в отдельный поток/актор.

Reply


swizard April 9 2015, 14:44:00 UTC
Я бы для этой задачи просто тупо завёл счётчик, который бы воркеры атомарно инкрементировали и из значения формировали бы себе пароль для подбора (5 символов из алфавита в 36 значений совсем немного получается).

Но раз предлагается померяться толщиной каналов, то щас попробую изобразить аналог на Rust с использованием mpsc, посмотрим, что получится.

Reply

thedeemon April 9 2015, 16:14:42 UTC
В посте про Го было сразу показано, что каналы там не шибко толстые, поэтому в упомянутых тут вариантах передается совсем мало данных.

Reply

swizard April 9 2015, 17:35:58 UTC
Так, добрался до задачки, получается как-то так для раста (переписал твой алгоритм с D): https://gist.github.com/swizard0/6f4df8bdea0db32833fd

70 строк, но по-сути один хрен, я придерживался стиля, но можно и сжать, это непринципиально. На моём ноуте получается 4.5 сек на подбор.

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

Reply

ext_709052 April 9 2015, 18:11:10 UTC
Вообще да, в таком виде это больше соревнование на скорость реализации md5. Если в реализации есть адаптация под особенности процессора (или архитектуры), то это большой плюс, т.к. основное время тратится внутри md5.

Reply


ext_709052 April 9 2015, 15:12:42 UTC
Флэш-моб, так флэш-моб :)
Т.к. мое вчерашнее решение было сделано с несколько другим прицелом, то вот более близкие к вашему варианту: eao197.blogspot.com/2015/04/progsobjectizer-md5bruteforce.html

Reply


simsun April 9 2015, 17:24:37 UTC
На плюсах то сколько шустрит?:)

Reply

ext_709052 April 9 2015, 19:27:29 UTC
На моей машине go-ный вариант отрабатывает за 8.1s, плюсовый -- за 6.7s.
Правда в go я не копенгаген, может компилятору какие-то хитрые ключики для оптимизации можно подставить...
Плюсовый вариант собран MSVS2013 Express с ключиком -02.
Go -- версии 1.4.2 (amd64).

Reply

simsun April 9 2015, 22:19:53 UTC
спс!

Reply


sleepy_drago April 9 2015, 18:20:10 UTC
интереснее было бы если бы обсуждались кластерные варианты. мол на 7 машинках по 8 цпу 4секунды.

Reply


Leave a comment

Up
[]