2012-10-14 2 views
1

У меня есть хеш-код MD5 с миллионом символов, и у меня есть первые 999,992 символов. Мне нужно переделать последние 8 цифр. Можно ли перенести хэш хэш первых символов (давайте назовем его базовым хешем), а затем просто грубой 8 строк длины символов и добавим хэш к базовому хешу, чтобы быстрее найти правильный проход? Какой алгоритм я должен использовать или какое программное обеспечение может мне помочь?Precalculating MD5

+0

Вы говорите об одном пароле длиной в миллион символов, а не о миллионе разных паролей, верно? – Wyzard

+0

Да. Один пароль, который содержит миллион символов. Я знаю хэш и все символы, кроме последних 8, и хочу быстро найти правильный пароль. – michaeluskov

ответ

2

Да, это возможно. MD5 основан на Merkle-Damgård construction, который выполняет хеширование в блоках. Вы можете хэшировать несколько блоков, а затем сохранить состояние хэш-функции и использовать ее в качестве отправной точки, чтобы попробовать различные возможности для остальных блоков.

На основе документации (я не проверял), я думаю, вызова clone() на Java MessageDigest будет копировать текущее состояние хэш-функции. Вы можете использовать это, чтобы построить свой частичный хэш из известных символов, а затем создать клон для каждой догадки. Это предполагает, что реализация MD5 фактически поддерживает клонирование. Есть шанс (в зависимости от того, какой язык и библиотека вы используете), что вам, возможно, придется написать собственную реализацию MD5.


Обратите внимание, что размер блока MD5 составляет 512 бит (64 символов), а длина пароля (один миллион) является целым кратным этого. Это означает, что ваши символы пароля полностью заполнят последний блок данных, а хеш-функции потребуется дополнительный блок для заполнения. Таким образом, вы предварительно скопируете частичный хеш первых 999 936 символов, которые вы знаете, затем создайте окончательный блок данных из оставшихся 56 символов, которые вы знаете, плюс 8, которые вы угадываете, затем добавьте блок дополнений после этого.

Реализация, как Java MessageDigest, должна позаботиться о деталях деления вещей на блоки. Вы можете возможно (опять же, я не тестировал) просто создайте MessageDigest, позвоните digest(byte[]) с вашими 999,992 известными байтами, а затем позвоните clone().

+0

Но у меня мало времени, и мне нужно перевести только один пароль. Существуют ли какие-либо программы или библиотеки, которые могут это сделать? – michaeluskov

+0

Не то, чтобы я знал, но я никогда не смотрел. Этот сайт посвящен программированию, а не взлому паролей, поэтому я обращаюсь к вашему вопросу программирования, а не к необходимости взломать пароль. – Wyzard

+0

Я попробовал хэш 999936 символов, хэш 64 символа (8 последних цифр = 0), а затем добавить каждый 8 байтов первого хэша к каждому 8 байтам второго. Ответ не равен хэшу с полным 1 миллионом паролем. – michaeluskov

Смежные вопросы