2015-12-06 3 views
3

Выполняя некоторые проблемы с кодированием практики в Java от Advent of Code и наткнувшись на то, где он попросил меня найти наименьшее шестизначное целое число в сочетании с ведущей строкой iwrupvqb, которая создала MD5, который начинался с пяти нулей.Создайте хеш MD5 с шестью ведущими нулями

Я нашел ответ на эту часть, используя функцию Apache DigestUtils.md5Hex, где я просто переборщил с помощью 100000-999999 и объединил ее с iwrupvqb, пока не получил MD5, который начинался с пяти нулей.

Ответ пришел, чтобы быть iwrupvqb346386 создания хэш:

0000045c5e2b3911eb937d9d8c574f09

Теперь он просит меня найти один с шестью ведущими нулями. Я просматривал страницы и страницы о том, как работает алгоритм md5, инвертируя MD5 и т. Д., Но, похоже, не может понять проблему в формате уравнения, который поможет мне определить, как MD5 будет рассчитываться на основе используемых символов ,

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

Я ничего не знаю о шестнадцатеричном, поэтому на данный момент я просто делаю снимки в темноте и пытаюсь угадать число комбо всю ночь, это не мое дело. Мне не обязательно решать эту проблему ни для чего, кроме практики, но мне любопытно узнать больше о том, что здесь происходит. (И да, я знаю, что MD5 скомпрометирован, и я бы никогда не использовал его в производстве)

+0

Так что в этом случае я должен просто позволить моей петле бежать вперед, пройдя iwrupvqb999999, пока не достигнет ответа? – Habitat

ответ

2

Эта проблема может быть решена только с помощью грубой форсировки. Например, как работает «доказательство работы» в Биткойне. Единственный способ ускорить его - оптимизировать каждый шаг в вашем расчете. Из-за этого брандмауэры перешли на специализированное оборудование. Они не делают ничего «особого» или «умного», они просто очень быстро вычисляют хеши.

Вы можете только оптимизировать код и добавить в него больше/лучшее оборудование. Здесь также хорошо работает кластер вычислительных узлов, проблема поддается параллельной обработке (опять же, пулам биткойнов для добычи).

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

0

Я также работаю с Адвентом кода, но я использую PowerShell. Я решил головоломку 2 дня 4 с тем же кодом, который я использовал для решения головоломки 1. Единственное изменение было в состоянии WHILE, чтобы проверить шесть ведущих нулей. Это заняло намного больше времени, чем нужно, чтобы решить головоломку 1. Я только что отпустил ее и лег спать после того, как увидел этот пост. Получил мой ответ, когда проснулся. Мой код размещен в Github. Advent of Code Day 4 Puzzle 2 solution with PowerShell