Можно ли расшифровать хеши MD5?

Кто-то сказал мне, что он видел программные системы, которые:

  1. получить зашифрованные пароли MD5 из других систем;
  2. расшифровать зашифрованные пароли и
  3. хранить пароли в базе данных системы, используя собственный алгоритм системы.

Это возможно? Я думал, что было невозможно/невозможно расшифровать хеши MD5.

Я знаю, что есть словари MD5, но есть ли алгоритм дешифрования?

Ответ 1

Нет. MD5 не является шифрованием (хотя он может использоваться как часть некоторых алгоритмов шифрования), это односторонняя хэш-функция. Большая часть исходных данных фактически "потеряна" как часть преобразования.

Подумайте об этом: MD5 всегда имеет длину 128 бит. Это означает, что возможны 2 128 возможных хешей MD5. Это достаточно большое число, и все же оно определенно конечно. И все же, существует бесконечное количество возможных входов для данной хеш-функции (и большинство из них содержат более 128 бит или нечетные 16 байтов). Таким образом, на самом деле существует бесконечное количество возможностей для данных, которые будут иметь хеш для одного и того же значения. Вещь, которая делает интересные хэши, заключается в том, что невероятно сложно найти две части данных, имеющих хэш, с тем же значением, и вероятность того, что это произойдет случайно, составляет почти 0.

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

Тем не менее, было обнаружено, что у MD5 есть некоторые недостатки, так что с некоторой сложной математикой можно найти столкновение, не опробовая возможные входные строки 2 128. И тот факт, что большинство паролей являются короткими, а люди часто используют общие значения (например, "пароль" или "секрет" ), означает, что в некоторых случаях вы можете разумно догадываться о некотором пароле с помощью Google для хэша или использовать Таблица радуги. Это одна из причин, почему вы всегда должны "salt "хешировать пароли, так что два одинаковых значения, когда хэшируются, не будут хешировать к тому же значение.

После того, как часть данных была выполнена через хеш-функцию, возврат не возвращается.

Ответ 2

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

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

MD5 - плохой хеш для паролей:

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

Я не эксперт по безопасности, поэтому не буду давать конкретных рекомендаций, кроме "Не проверяйте собственную систему аутентификации". Найдите одного из уважаемых поставщиков и используйте его. Как разработка, так и внедрение систем безопасности - сложное дело.

Ответ 3

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

Но это не значит, что

  • жизнеспособное
    или
  • Secure

Вы не хотите "реверсировать" хеш MD5. Используя методы, описанные ниже, мне никогда не понадобится. "Реверсирование" MD5 на самом деле считается вредоносным. Несколько веб-сайтов предлагают возможность "взломать" и "грубые" хеши MD5, но все они представляют собой массивные базы данных, содержащие словарные слова, ранее представленные пароли и другие слова. Существует очень небольшой шанс, что у него будет хеш MD5, который вам нужно изменить. И если вы соленый хэш MD5 - это тоже не сработает!:)


Способ использования логинов с хешированием MD5:

Во время регистрации:
Пользователь создает пароль → Пароль хешируется с помощью MD5 → Хэш, хранящийся в базе данных

Во время входа в систему:
Пользователь вводит имя пользователя и пароль → (Имя пользователя проверено) Пароль хешируется с использованием MD5 → Хэш сравнивается с сохраненным хэшем в базе данных

Когда требуется "Забыли пароль":

2 варианта:

  • Пользователь отправил случайный пароль для входа в систему, затем прослушивается его изменение при первом входе в систему.

или

  • Пользователь отправляет ссылку для изменения своего пароля (с дополнительной проверкой, если у вас есть вопрос безопасности /etc ), а затем новый пароль хэшируется и заменяется старым паролем в базе данных

Ответ 4

Не напрямую. Из-за принципа принципа pigeonhole существует (вероятно) более одного значения, которое хэшируется для любого заданного выхода MD5. Таким образом, вы не можете отменить это с уверенностью. Более того, MD5 сделан для того, чтобы затруднить поиск такого реверсивного хеша (однако были атаки, которые вызывают collisions - то есть производят два значения этот хэш к одному и тому же результату, но вы не можете контролировать то, что будет иметь значение MD5).

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

Ответ 5

Невозможно, по крайней мере, не в разумные сроки.

Как часто это обрабатывается, это пароль "reset". То есть вы даете им новый (случайный) пароль и отправляете их по электронной почте.

Ответ 6

Вы не можете вернуть пароль md5 (на любом языке)

Но вы можете:

дать пользователю новый.

проверьте в каком-нибудь радужном столе, чтобы, возможно, вернуть старый.

Ответ 7

Один из подходящих способов перепродажи пароля

Пример с базой данных

Пользователи

user_id |   email_id    |   password    | reset_token   |   pwd_expiry
1       |   [email protected] |   kladsjflk   | roiurwerols   |   2012-10-21 11:43:34

Забыл пароль

Здесь возьмите email_id и проверите его настоящее в базе данных Users, Если да, то сделайте случайное число/буквенное число или unixtimestamp и преобразуйте эту строку в хэш и обновите поле reset_token с помощью преобразованной/хешированной строки.

Теперь возьмите pick (user_id или email_id) и reset_token и сделайте ссылку, как показано ниже

reset_password.html?user=1&token=roiurwerols

И отправьте эту ссылку пользователям.

Reset Пароль

Теперь, когда пользователь нажимает ссылки, получает значения параметров из ссылки с помощью метода GET. Проверьте, есть ли user_id с 1 и reset_token в базе данных, если эти значения существуют, то условие истинно, что пользователь может обновить /reset пароль. После обновления пароля / reset, затем сделайте reset_token в empty этого user_id [убедитесь, что правильно написаны SQL-запросы]

И вот оно.. И если вы хотите добавить истечение срока действия пароля reset, добавьте поле в таблицу Users с помощью pwd_expiry а затем сделать условие в reset_password меньше your desired hours до todays date

Ответ 8

Нет, он, должно быть, был замешан в словарях MD5.

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

Ответ 9

Расшифровка (прямое получение простого текста из хэш-значения алгоритмическим способом), no.

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

Ответ 10

MD5 - алгоритм хэширования, вы не можете вернуть значение хэша.

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

Ответ 11

Там нет простого способа сделать это. Это своего рода точка хэширования пароля в первую очередь.:)

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

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

Ответ 12

Посмотрите все другие ответы здесь о том, как и почему это не обратимо и почему вы все равно не захотите.

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

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

Ответ 13

Невозможно "вернуть" хэш-функцию в терминах поиска для нее обратной функции. Как упоминалось ранее, в этом весь смысл наличия хэш-функции. Он не должен быть обратимым, и он должен позволять быстро вычислять значение хэш-функции. Таким образом, единственный способ найти входную строку, которая дает заданное значение хэш-функции, - это попробовать все возможные комбинации. По этой причине это называется грубой силой.

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

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

Ответ 14

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

Вы не можете дешифровать хэш MD5.

Ответ 15

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

что единственный способ, не вдаваясь в криптоанализ.

Ответ 16

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

В некоторых случаях метод словаря может быть просто бесполезным:

  • если сообщение хешируется с использованием сообщения SALT
  • если сообщение является хешем более одного раза

Например, вот один онлайн-инструмент для расшифровки MD5.

Ответ 17

Да, именно то, что вы просите, возможно. Невозможно "дешифровать" пароль MD5 без помощи, но можно повторно зашифровать пароль MD5 в другой алгоритм, просто не все за один раз.

Что вы делаете, это организовать для ваших пользователей возможность входа в новую систему с использованием старого пароля MD5. В тот момент, когда они вошли в систему, они предоставили вашей системе входа версию unchashed пароля, которая, как вы докажете, соответствует хеш файлу MD5, который у вас есть. Затем вы можете преобразовать этот непобежденный пароль в новый алгоритм хэширования.

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

(NB: семь лет спустя, о, надеюсь, кто-то найдет это полезным)

Ответ 18

Нет, это невозможно. Либо вы можете использовать словарь, либо можете использовать хэширование разных значений, пока не получите хэш, который вы ищете. Но он не может быть "расшифрован".

Ответ 19

MD5 имеет свои недостатки (см. Wikipedia), поэтому есть несколько проектов, которые пытаются прекомпретировать хеши. Википедия также намекает на некоторые из этих проектов. Один, кого я знаю (и уважаю), - это офрак. Вы не можете сообщить пользователю свой пароль, но вы можете сообщить им пароль, который работает. Но я думаю: просто напишите новый пароль, если они забыли.

Ответ 20

Теоретически невозможно расшифровать хеш-значение, но у вас есть несколько грязных приемов для возврата исходного простого текста.

  1. Брутфорс: все алгоритмы компьютерной безопасности страдают от брутфорсинга. Основываясь на этой идее, в настоящее время в GPU используется идея параллельного программирования, с помощью которой он может вернуть простой текст, массово используя его с помощью любого графического процессора. Этот инструмент hashcat выполняет эту работу. В прошлый раз, когда я проверял версию cuda, я смог перебрать 7-значный символ длиной в течение шести минут.
  2. Поиск в Интернете: просто скопируйте и вставьте хеш в Google и посмотрите, сможете ли вы найти соответствующий открытый текст там. Это не решение, когда вы что-то тестируете, но это определенно стоит попробовать. Некоторые сайты поддерживают хэш почти для всех слов в словаре.

Ответ 21

Алгоритм Hash MD5 не является обратимым, поэтому MD5-декодирование невозможно, но на каком-то веб-сайте есть встроенный набор паролей, поэтому вы можете попробовать онлайн для декодирования MD5-хэша.

Попробуйте онлайн:

MD5 Decrypt

md5online

md5decrypter

Ответ 22

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

Расшифровка не является функцией, которая определена для хэш-функции; шифрование и дешифрование являются функциями шифра, такого как AES в режиме CBC; хэш-функции не шифруют и не дешифруют. Хеш-функции используются для переваривания входного сообщения. Как следует из названия, обратный алгоритм не возможен по замыслу.


MD5 был разработан как криптографически безопасная, односторонняя хеш-функция. Теперь легко генерировать коллизии для MD5 - даже если большая часть входного сообщения предварительно определена. Таким образом, MD5 официально сломан, и MD5 больше не должен рассматриваться как криптографически безопасный хеш. Однако все еще невозможно найти входное сообщение, которое приводит к хэш-значению: найдите X, когда известен только H (X) (и X не имеет предварительно вычисленной структуры с хотя бы одним 128-байтовым блоком предварительно вычисленных данных). Нет известных атак с использованием изображений на MD5.

Как правило, также можно угадывать пароли, используя атаки методом грубой силы или (расширенными) словарями, сравнивать базы данных или пытаться найти хэши паролей в так называемых радужных таблицах. Если совпадение найдено, то с вычислительной точки зрения определено, что входные данные были найдены. Хэш-функции также защищены от коллизионных атак: обнаружение X' так, чтобы H(X') = H(X) выдавал H(X). Таким образом, если найден X, то с вычислительной точки зрения он действительно является входным сообщением. В противном случае вы бы все-таки совершили атаку коллизиям. Радужные таблицы могут быть использованы для ускорения атак, и есть специальные интернет-ресурсы, которые помогут вам найти пароль с конкретным хешем.

Конечно, можно повторно использовать значение хеша H(X) для проверки паролей, которые были сгенерированы в других системах. Единственное, что должна сделать принимающая система, - это сохранить результат детерминированной функции F, которая принимает H(X) в качестве входных данных. Когда X дается системе, тогда H(X) и, следовательно, F могут быть пересчитаны и результаты могут быть сравнены. Другими словами, не требуется расшифровывать значение хеша, чтобы просто проверить правильность пароля, и вы все равно можете сохранить хеш как другое значение.


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

Хэши паролей также содержат рабочий фактор (иногда настраиваемый с использованием счетчика итераций), который может значительно замедлить атаки, которые пытаются найти пароль с учетом значения соли и хеша. Это важно, так как база данных с солями и хэш-значениями может быть украдена. Наконец, хеш-пароль также может быть жестким для памяти, так что для его вычисления требуется значительный объем памяти. Это делает невозможным использование специального оборудования (графических процессоров, ASIC, FPGA и т.д.), Чтобы злоумышленник мог ускорить поиск. Другие входные данные или параметры конфигурации, такие как перец или степень распараллеливания, также могут быть доступны для хэша пароля.

Тем не менее, он по-прежнему позволяет кому-либо проверять пароль, заданный H(X), даже если H(X) является хэшем пароля. Хеши паролей все еще детерминированы, поэтому, если кто-то знает все входные данные и сам алгоритм хеширования, тогда X можно использовать для вычисления H(X) и - опять же - результаты можно сравнивать.

Обычно используются хэши паролей bcrypt, scrypt и PBKDF2. Существует также Argon2 в различных формах, который является победителем относительно недавнего конкурса хэширования паролей. Здесь, на CrackStation, есть хорошее сообщение в блоге о правильной защите паролем.


Возможно, что злоумышленники не смогут выполнить вычисление хеша, чтобы убедиться, что пароль правильный. Для этого перец может быть использован в качестве ввода хэша пароля. Альтернативно, значение хеш-функции, конечно, может быть зашифровано с использованием шифра, такого как AES, и режима работы, такого как CBC или GCM. Это, однако, требует хранения секрета/ключа независимо и с более высокими требованиями к доступу, чем хэш пароля.

Ответ 23

Вы можете сделать это одним способом, попробуйте онлайн MD5 Decrypter tool.

Ответ 24

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

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

Ответ 25

Пока еще невозможно вставить хэш пароля в алгоритм и вернуть пароль в обычный текст, потому что хеширование - это односторонняя вещь. Но то, что делали люди, - это генерировать хэши и хранить их в большой таблице, чтобы при вводе определенного хэша он проверял таблицу для пароля, который соответствует хешу, и возвращает вам этот пароль. Пример сайта, который делает это http://www.md5online.org/. Современная система хранения паролей учитывает это с помощью алгоритма соления, так что при вводе того же пароля в поле пароля при регистрации генерируются разные хэши.

Ответ 26

Нет, вы не можете расшифровать/перевернуть md5, так как это однонаправленная хеш-функция, пока вы не найдете обширные уязвимости в MD5. Другой способ заключается в том, что на некоторых веб-сайтах имеется большой набор баз паролей, поэтому вы можете попробовать в сети декодировать вашу хеш-строку MD5 или SHA1. Я пробовал веб-сайт, как http://www.mycodemyway.com/encrypt-and-decrypt/md5, и он отлично работает для меня, но это полностью зависит от вашего хеша, если этот хеш хранится в этой базе данных, вы можете получить фактическую строку.