Закат эпохи алгоритма MD5? / Хабр
Вспомним про хеш
Хеш-функция — функция, осуществляющая преобразование массива входных данных произвольной длины в выходную битовую строку установленной длины, выполняемое определенным алгоритмом. Преобразование, производимое хеш-функцией, называется хешированием. Результат преобразования называется хешем.
Хеш-функции применяются в следующих случаях:
При построении ассоциативных массивов.
При поиске дубликатов в последовательностях наборов данных.
При построении уникальных идентификаторов для наборов данных.
При вычислении контрольных сумм от данных для последующего обнаружения в них ошибок, возникающих при хранении и передаче данных.
При сохранении паролей в системах защиты в виде хеш-кода (для восстановления пароля по хеш-коду требуется функция, являющаяся обратной по отношению к использованной хеш-функции).
При выработке электронной подписи (на практике часто подписывается не само сообщение, а его хеш-образ).
С точки зрения математики, контрольная сумма является результатом хеш-функции, используемой для вычисления контрольного кода — небольшого количества бит внутри большого блока данных, например, сетевого пакета или блока компьютерного файла, применяемого для обнаружения ошибок при передаче или хранении информации. Значение контрольной суммы добавляется в конец блока данных непосредственно перед началом передачи или записи данных на какой-либо носитель информации. Впоследствии оно проверяется для подтверждения целостности данных. Популярность использования контрольных сумм для проверки целостности данных обусловлена тем, что подобная проверка просто реализуема в двоичном цифровом оборудовании, легко анализируется и хорошо подходит для обнаружения общих ошибок, вызванных наличием шума в каналах передачи данных.
MD5 — алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института в 1991 году. Предназначен для создания контрольных сумм или «отпечатков» сообщения произвольной длины и последующей проверки их подлинности. Алгоритм MD5 основан на алгоритме MD4.
Как работает протокол?
Утилита md5sum, предназначенная для хеширования данных заданного файла по алгоритму MD5, возвращает строку. Она состоит из 32 цифр в шестнадцатеричной системе счисления (016f8e458c8f89ef75fa7a78265a0025).
То есть хеш, полученный от функции, работа которой основана на этом алгоритме, выдает строку в 16 байт (128) бит. И эта строка включает в себя 16 шестнадцатеричных чисел. При этом изменение хотя бы одного ее символа приведет к последующему бесповоротному изменению значений всех остальных битов строки.
В данном алгоритме предполагается наличие 5 шагов, а именно:
Выравнивание потока
Добавление длины сообщения
Инициализация буфера
Вычисление в цикле
Результат вычислений
На первом шаге “Выравнивание потока” сначала дописывают единичный бит в конец потока, затем необходимое число нулевых бит. Входные данные выравниваются так, чтобы их новый размер был сравним с 448 по модулю 512. Выравнивание происходит, даже если длина уже сравнима с 448.
На втором шаге в оставшиеся 64 бита дописывают 64-битное представление длины данных до выравнивания. Сначала записывают младшие 4 байта. Если длина превосходит то дописывают только младшие биты. После этого длина потока станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.
На третьем для вычислений используются четыре переменные размером 32 бита и задаются начальные значения в 16-ричном виде. В этих переменных будут храниться результаты промежуточных вычислений.
Во время 4-го шага “Вычисление в цикле” происходит 4 раунда, в которых сохраняются значения, оставшиеся после операций над предыдущими блоками. После всех операций суммируются результаты двух последних циклов. Раундов в MD5 стало 4 вместо 3 в MD4. Добавилась новая константа для того, чтобы свести к минимуму влияние входного сообщения. В каждом раунде на каждом шаге и каждый раз константа разная. Она суммируется с результатом и блоком данных. Результат каждого шага складывается с результатом предыдущего шага. Из-за этого происходит более быстрое изменение результата. Изменился порядок работы с входными словами в раундах 2 и 3.
В итоге на 5-ом шаге мы получим результат вычислений, который находится в буфере это и есть хеш. Если выводить побайтово, начиная с младшего байта первой переменной и закончив старшим байтом последней, то мы получим MD5-хеш.
Уязвимости MD5
Алгоритм MD5 уязвим к некоторым атакам. Например, возможно создание двух сообщений с одинаковой хеш-суммой.
На данный момент существуют несколько видов взлома хешей MD5 — подбора сообщения с заданным хешем:
При этом методы перебора по словарю и brute-force могут использоваться для взлома хеша других хеш-функций (с небольшими изменениями алгоритма). RainbowCrack требует предварительной подготовки радужных таблиц, которые создаются для заранее определённой хеш-функции. Поиск коллизий специфичен для каждого алгоритма. Рассмотрим каждый вид «взлома» по отдельности.
Атаки переборного типа
В криптографии атака полного перебора или исчерпывающий поиск ключей это стратегия, которая теоретически может быть использована против любых зашифрованных данных. Злоумышленник, который не может воспользоваться слабостью в системе шифрования, реализовывает атаку подобного типа. Она включает в себя систематическую проверку всех возможных ключей, пока не будет найден правильный. В худшем случае для взлома сообщения потребуется задействовать всю вычислительную мощность.
Перебор по словарю — атака на систему защиты, применяющая метод полного перебора предполагаемых паролей, используемых для аутентификации, осуществляемого путём последовательного пересмотра всех слов (паролей в чистом виде) определённого вида и длины из словаря с целью последующего взлома системы и получения доступа к секретной информации.
Как видно из определения, атаки по словарю являются атаками полного перебора. Единственное отличие состоит в том, что данные атаки обычно более эффективны так как становится не нужным перебирать все комбинации символов, чтобы добиться успеха. Злоумышленники используют обширные списки наиболее часто используемых паролей таких как, имена домашних животных, вымышленных персонажей или конкретно характерных слов из словаря – отсюда и название атаки. Однако если пароль действительно уникален (не является комбинацией слов), атака по словарю не сработает. В этом случае использование атаки полного перебора единственный вариант.
Для полного перебора или перебора по словарю можно использовать программы PasswordsPro, MD5BFCPF, John the Ripper. Для перебора по словарю существуют готовые словари.
RainbowCrack
Это ещё один метод взлома хеша. Он основан на генерировании большого количества хешей из набора символов, чтобы по получившейся базе вести поиск заданного хеша.
Радужные таблицы состоят из хеш-цепочек и более эффективны, чем предыдущий упомянутый тип атак, поскольку они оптимизируют требования к хранению, хотя поиск выполняется немного медленнее. Радужные таблицы отличаются от хеш-таблиц тем, что они создаются с использованием как хеш-функций, так и функций редукции.
Цепочки хешей — метод для уменьшения требования к объёму памяти. Главная идея — определение функции редукции R, которая сопоставляет значениям хеша значения из таблицы. Стоит отметить, что R не является обращением хеш-функции.
Радужные таблицы являются развитием идеи таблицы хеш-цепочек. Функции редукции применяются по очереди, перемежаясь с функцией хеширования.
Использование последовательностей функций редукции изменяет способ поиска по таблице. Поскольку хеш может быть найден в любом месте цепочки, необходимо сгенерировать несколько различных цепочек.
Существует множество систем взлома паролей и веб-сайтов, которые используют подобные таблицы. Основная идея данного метода — достижение компромисса между временем поиска по таблице и занимаемой памятью. Конечно, использование радужных таблиц не гарантирует 100% успеха взлома систем паролей. Но чем больше набор символов, используемый для создания радужной таблицы, и чем продолжительнее хеш-цепочки, тем больше будет шансов получить доступ к базе данных исходных паролей.
Коллизии MD5
Коллизия хеш-функции — это получение одинакового значения функции для разных сообщений и идентичного начального буфера. В отличие от коллизий, псевдоколлизии определяются как равные значения хеша для разных значений начального буфера, причём сами сообщения могут совпадать или отличаться. В 1996 году Ганс Доббертин нашёл псевдоколлизии в MD5, используя определённые инициализирующие векторы, отличные от стандартных. Оказалось, что можно для известного сообщения построить второе такое, что оно будет иметь такой же хеш, как и исходное. С точки зрения математики, это означает следующее:
где — начальное значение буфера, а и — различные сообщения.
MD5 был тщательно изучен криптографическим сообществом с момента его первоначального выпуска и до 2004 года демонстрировал лишь незначительные недостатки. Однако летом 2004 года криптографы Ван Сяоюнь и Фэн Дэнго продемонстрировали алгоритм способный генерировать MD5-коллизии с использованием стандартного вектора инициализации.
Позже данный алгоритм был усовершенствован, как следствие время поиска пары сообщений значительно уменьшилось, что позволило находить коллизии с приемлемой вычислительной сложностью. Как оказалось, в MD5 вопрос коллизий не решается.
Безопасное использование MD5
MD5 – до сих пор является одним из самых распространенных способов защитить информацию в сфере прикладных исследований, а также в области разработки веб-приложений. Хеш необходимо обезопасить от всевозможных хакерских атак.
Информационная энтропия
ЭнтропияНадежность и сложность пароля в сфере информационных технологий обычно измеряется в терминах теории информации. Чем выше информационная энтропия, тем надежнее пароль и, следовательно, тем труднее его взломать.
Чем длиннее пароль и чем больше набор символов, из которого он получен, тем он надежнее. Правда вместо количества попыток, которые необходимо предпринять для угадывания пароля, принято вычислять логарифм по основанию 2 от этого числа, и полученное значение называется количеством «битов энтропии» в пароле. При увеличении длины пароля на один бит количество возможных паролей удвоится, что сделает задачу атакующего в два раза сложнее. В среднем, атакующий должен будет проверить половину из всех возможных паролей до того, как найдет правильный. В качестве наилучшей практики должно выполняться предварительное требование: приложение настаивает на том, чтобы пользователь использовал надежный пароль в процессе регистрации.
Добавление “соли” к паролю
Одна из наиболее распространенных причин успешных атак заключается в том, что компании не используют добавление соли к исходному паролю. Это значительно облегчает хакерам взлом системы с помощью атак типа радужных таблиц, особенно учитывая тот факт, что многие пользователи используют очень распространенные, простые пароли, имеющие одинаковые хеши.
Сольэто вторичный фрагмент информации, состоящий из строки символов, которые добавляются к открытому тексту (исходному паролю пользователя), а затем хешируется. Соление делает пароли более устойчивыми к атакам типа радужных таблиц, так как подобный пароль будет иметь более высокую информационную энтропию и, следовательно, менее вероятное существование в предварительно вычисленных радужных таблицах. Как правило, соль должна быть не менее 48 бит.
Декодирование кода MD5
Иногда при работе с компьютером или поврежденными базами данных требуется декодировать зашифрованное с помощью MD5 значение хеша.
Удобнее всего использовать специализированные ресурсы, предоставляющие возможность сделать это online:
md5.web-max.ca данный сервис обладает простым и понятным интерфейсом. Для получения декодированного значения нужно ввести хеш и заполнить поле проверочной капчи;
md5decrypter.com аналогичный сервис;
msurf. ru данный ресурс имеет простой русскоязычный интерфейс. Его функционал позволяет не только расшифровывать значения хеш-кодов, но и создавать их.
Если присмотреться к значениям декодинга, то становится понятно, что процесс расшифровки почти не дает результатов. Эти ресурсы представляют собой одну или несколько объединенных между собой баз данных, в которые занесены расшифровки самых простых слов.
При этом данные декодирования хеша MD5 даже такой распространенной части пароля, как «админ», нашлись лишь в одной базе. Поэтому хеши паролей, состоящих из более сложных и длинных комбинаций символов, практически невозможно расшифровать.
Создание хеша MD5 является односторонним процессом. Поэтому не подразумевает обратного декодирования первоначального значения.
Заключение
Как уже отмечалось ранее, основная задача любой функции хеширования сообщений производить образы, которые можно считать относительно случайными. Чтобы считаться криптографически безопасной, хэш-функция должна отвечать двум основным требованиям. Во-первых, злоумышленник не может сгенерировать сообщение, соответствующее определенному хеш-значению. Во-вторых, невозможно создать два сообщения, которые производят одно и то же значение (коллизии в MD5).
К сожалению, выяснилось, что алгоритм MD5 не способен отвечать данным требованиям. IETF (Internet Engineering Task Force) рекомендовала новым проектам протоколов не использовать MD5, так как исследовательские атаки предоставили достаточные основания для исключения использования алгоритма в приложениях, которым требуется устойчивость к различного рода коллизиям.
Хеши MD5 больше не считаются безопасными, и их не рекомендовано использовать для криптографической аутентификации.
Спасибо за внимание!
Хэш-функция MD5 / Хабр
Много на просторах интернета, в том числе на хабре, написано о различный хэш-функциях, однако, в данном топике я дам свой взгляд на алгоритм и реализацию MD5.
Что такое хэш-функция и чем её едят?
Хэш-функция предназначена для свертки входного массива любого размера в битовую строку, для MD5 длина выходной строки равна 128 битам. Для чего это нужно? К примеру у вас есть два массива, а вам необходимо быстро сравнить их на равенство, то хэш-функция может сделать это за вас, если у двух массивов хэши разные, то массивы гарантировано разные, а в случае равенства хэшей — массивы скорее всего равны.
Однако чаще всего хэш-функции используются для проверки уникальности пароля, файла, строки и тд. К примеру, скачивая файл из интернета, вы часто видите рядом с ним строку вида b10a8db164e0754105b7a99be72e3fe5 — это и есть хэш, прогнав этот файл через алгоритм MD5 вы получите такую строку, и, если хэши равны, можно с большой вероятностью утверждать что этот файл действительно подлинный (конечно с некоторыми оговорками, о которых расскажу далее).
Конкретнее о MD5
Не буду углубляться в историю создания, об этом можно почитать в википедии, однако отмечу что алгоритм был создан профессором Р. Риверстом в 1991 году на основе алгоритма md4. Описан этот алгоритм в RFC 1321
Алгоритм состоит из пяти шагов:
1)Append Padding Bits
В исходную строку дописывают единичный байт 0х80, а затем дописывают нулевые биты, до тех пор, пока длина сообщения не будет сравнима с 448 по модулю 512. То есть дописываем нули до тех пор, пока длина нового сообщения не будет равна [длина] = (512*N+448),
где N — любое натуральное число, такое, что это выражение будет наиболее близко к длине блока.
Далее в сообщение дописывается 64-битное представление длины исходного сообщения.
3)Initialize MD Buffer
На этом шаге инициализируется буффер
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Как можно заметить буффер состоит из четырех констант, предназначенный для сбора хэша.
4)Process Message in 16-Word Blocks
На четвертом шаге в первую очередь определяется 4 вспомогательные логические функции, которые преобразуют входные 32-битные слова, в, как ни странно, в 32-битные выходные.
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Также на этом шаге реализуется так называемый «белый шум» — усиление алгоритма, состоящее 64 элементного массива, содержащего псевдослучайные числа, зависимые от синуса числа i:
T[i]=4,294,967,296*abs(sin(i))
Далее начинается «магия». Копируем каждый 16-битный блок в массив X[16] и производим манипуляции:
AA = A
BB = B
CC = C
DD = D
A, B, C, D — регистры
F(B,C,D) — одна из логических функций
X[k] — k-тый элемент 16-битного блока.
T[i] — i-тый элемент таблицы «белого шума»
<<< s — операция циклического сдвига на s позиций влево.
Приводить все раунды не имеет смысла, все их можно посмотреть тут
Ну и в конце суммируем результаты вычислений:
A = A + AA
C = C + CC
D = D + DD
5) Output
Выводя побайтово буффер ABCD начиная с A и заканчивая D получим наш хэш.
Надежность
Существует мнение что взломать хэш MD5 невозможно, однако это неправда, существует множество программ подбирающих исходное слово на основе хэша. Абсолютное большинство из них осуществляет перебор по словарю, однако существуют такие методы как RainbowCrack, он основан на генерировании множества хэшей из набора символов, чтобы по получившейся базе производить поиск хэша.
Также у MD5, как у любой хэш-функции, существует такое понятие как коллизии — это получение одинаковых хэшей для разных исходных строк. В 1996 году Ганс Доббертин нашёл псевдоколлизии в MD5, используя определённый инициализирующий буффер (ABCD). Также в 2004 году китайские исследователи Ван Сяоюнь, Фен Дэнгуо, Лай Сюэцзя и Юй Хунбо объявили об обнаруженной ими уязвимости в алгоритме, позволяющей за небольшое время (1 час на кластере IBM p690) находить коллизии. Однако в 2006 году чешский исследователь Властимил Клима опубликовал алгоритм, позволяющий находить коллизии на обычном компьютере с любым начальным вектором (A,B,C,D) при помощи метода, названного им «туннелирование».
Прилагаю собственный пример реализации функции на C#:
md5.rar
MD5 Generator — Создание MD5 Интернет Хэш Любая строка
что md5 все?
MD5 является криптографической хэш-функции алгоритма также известный как «сообщение-дайджеста». Это содержит ряд цифр, генерируемых процедурой хеширования в одну сторону. Дайджесты сообщений специально разработаны для обеспечения целостности куска информации или средств массовой информации и определить, есть ли изменения и дополнение в любую часть сообщения.
Дайджесты сообщений защищены однонаправленные хэш-функции, которые принимают случайные величины данных и получения значения хэш фиксированной длины.
что использование md5?
Основная функция MD5, чтобы вычислить значение хэш-функции в криптографии. В то время как хэш-функция, чтобы получить блоки данных и возвращать их с битовой строки фиксированного размера или хэш-значение. Данные, которые были использованы с помощью хэш-функции упоминается как «сообщение»; в то время, вычисленное значение хэша «дайджест сообщения».
MD5, вместе с другими хэш-функций, обычно используется при создании цифровых подписей и кодов подтверждения сообщений, индексирование данных в хэш-таблицы, индикаторы скопированные данные, для отпечатков пальцев, чтобы сортировать и идентифицировать файлы, а также выступать в качестве контрольных сумм в обнаружении непреднамеренного повреждение данных.
MD5 хэш используется для обеспечения целостности данных файлов, так как хэш-алгоритм MD5 имеет уникальный способ получения тех же результатов, для того же набора данных. Пользователи MD5 разрешается сравнить хэш источника данных с вновь сгенерированным хэшем по назначению файла; это помогает пользователю проверить, если хэш цел и неизменный вид.
Знайте, что MD5 хэш НЕ является шифрование, но только отпечатки пальцев данного входа. Кроме того, вы должны понимать, что это односторонний процесс, который означает, что пользователь не может отменить сгенерированный MD5 хэш, чтобы восстановить исходную строку.
как использовать наш md5 хэш-генератор?
Наш MD5 Hash Generator работает, добавив строку в отведенном, и наш MD5 преобразователь будет вычислять ваши данные, используя уникальный дизайн алгоритм криптографического хеширования для хэша MD5, который использует расположение символов на 32-шестнадцатеричное.
После того, как наш MD5 хэш-генератор завершил обработку вашего запроса, вы уже можете отправить MD5 хэш для получателя. Вы можете проверить целостность вашего MD5 хэша, имея это трещиной; строка проверяется, если она дает те же результаты.
Это онлайн MD5 имеет генератор инструмент позволяет генерировать MD5 хэш любой строки. Это очень полезно при кодировании пароли, данные кредитных карт и других конфиденциальных данных в MySQL, Postgress или других баз данных. Этот инструмент полезен для PHP программистов, ASP программистов и всех, кто использует MySQL, SQL, или Postgress.
каков нормальный размер значения хэша md5?
MD5 может производить 128 бит (16 байт) значение хеш-функции, и оно характеризуется шестнадцатеричное число из 32 цифр.
Могу ли я расшифровать md5?
NO. Вы не можете расшифровать MD5, потому что это не алгоритм шифрования. Многие люди путают об этом, потому что они часто думают, что MD5 может шифровать данные. Где на самом деле MD5 не имеет возможности шифрования. Это может вычислить только хэш-значение для выбранного набора данных.
есть способ обратить md5?
Опять же, ответ НЕТ. Вы не можете отменить MD5, поскольку хэш-функции работают только на одну сторону процедур. Генератор MD5 будет только получить данные или сообщения, дайджесты, а затем генерировать хеш-значение. Там нет обратной функции для MD5.
почему md5 не обратимы?
Для того, чтобы лучше объяснить, почему MD5 не является обратимым, вот пример: когда мы используем MD5 онлайн генератор на текстовые данные, скажем, 750000 символов, мы получим около 32 цифр переваривать. Таким образом, если мы хотим, чтобы вернуть это, как бы систему определения точности, при которой 750000 символов использовались только из 32 цифр? Это причина, почему MD5 генератор просто не имеют такой функции.
есть возможность столкновения?
Для того, чтобы иметь возможность получить столкновения MD5, вы должны хэшировании около 6000000000 файлов в секунду на протяжении 100 лет. Если вы хотите узнать больше об этом, читайте на День рождения Paradox.
какие радужные таблицы все о?
Радужные таблицы также известны как справочные таблицы обратной хэш. В этом методе, MD5 вычисляет же хэш-значение для данных данных или сообщений; это довольно легко использовать грубую силу для поиска значения. Например, можно начать вычисления дайджеста из восьми знаков (буквенно-цифровых комбинаций) и человек может посмотреть на таблицу паролей, чтобы узнать, какой пароль совпадает с которым переваривать.
это md5 функция действительно безопасно?
Правда MD5 был признан быть устойчивым без столкновений. НО это может также зависеть от того, как и где вы используете этот MD5.
MD5 хеш генерируется путем получать строку любой желаемой длины и кодирования его в 128-битный отпечаток пальца. Набрав ту же строку, используя генератор MD5 всегда будет производить тот же 128-битный хеш-результат. MD5 хэшей обычно используются вместе с меньшими строк при принятии и сохранение паролей, номеров кредитных карт или любой другой конфиденциальной информации в базах данных, таких как популярный MySQL. Этот инструмент онлайн генератор MD5 предоставляет пользователям быстрый и простой способ для кодирования хэш MD5 из основной строки до 256 символов в длину.
Итак, если вы хотите использовать только MD5 в качестве базового алгоритма контрольной суммы или отличительного элемента управления в таблице базы данных, он будет работать очень хорошо. MD5 настолько компактен, что ему удалось только лишь 32 цифр! Вот почему он не ест слишком много места для хранения и имеет возможность вычислять и генерировать хэш в оснастке. Просто имейте в виду, чтобы избежать использования MD5 для паролей дайджесты или других очень важных систем безопасности. Вы можете найти много руководящих принципов MD5 в Интернете для вашей защиты; Вы можете использовать эти принципы, чтобы правильно использовать MD5.
Другие языки: English, русский, 日本語, italiano, français, Português, Español, Deutsche, 中文.
MD5 Класс (System.Security.Cryptography) | Microsoft Learn
Twitter LinkedIn Facebook Адрес электронной почты
- Ссылка
Определение
- Пространство имен:
- System. Security.Cryptography
- Сборка:
- System.Security.Cryptography.Algorithms.dll
- Сборка:
- System.Security.Cryptography.dll
- Сборка:
- mscorlib.dll
- Сборка:
- netstandard.dll
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения.
Представляет абстрактный класс, от которого наследуются все реализации хэш-алгоритма MD5.
public ref class MD5 abstract : System::Security::Cryptography::HashAlgorithm
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")] public abstract class MD5 : System.Security.Cryptography.HashAlgorithm
public abstract class MD5 : System.Security.Cryptography.HashAlgorithm
[System.Runtime.InteropServices.ComVisible(true)] public abstract class MD5 : System.Security.Cryptography.HashAlgorithm
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>] type MD5 = class inherit HashAlgorithm
type MD5 = class inherit HashAlgorithm
[<System.Runtime.InteropServices.ComVisible(true)>] type MD5 = class inherit HashAlgorithm
Public MustInherit Class MD5 Inherits HashAlgorithm
- Наследование
Object
HashAlgorithm
MD5
- Производный
System. Security.Cryptography.MD5Cng
System.Security.Cryptography.MD5CryptoServiceProvider
- Атрибуты
UnsupportedOSPlatformAttribute ComVisibleAttribute
Хэш-функции сопоставляют двоичные строки произвольной длины с небольшими двоичными строками фиксированной длины. Криптографическая хэш-функция имеет свойство, которое вычисляется невозможно для поиска двух различных входных данных, которые хэширует в одно и то же значение; то есть хэши двух наборов данных должны совпадать, если соответствующие данные также совпадают. Небольшие изменения данных приводят к большим непредсказуемым изменениям в хэше.
Размер хэша для алгоритма MD5 составляет 128 бит.
Методы ComputeHash MD5 класса возвращают хэш в виде массива 16 байт. Обратите внимание, что некоторые реализации MD5 создают 32-символьный хэш с шестнадцатеричным форматом. Чтобы взаимодействовать с такими реализациями, отформатируйте возвращаемое значение ComputeHash методов в виде шестнадцатеричного значения.
Примечание
Из-за проблем с конфликтом с MD5/SHA1 корпорация Майкрософт рекомендует SHA256 или SHA512. Рассмотрите SHA256 возможность использования класса или SHA512 класса вместо MD5 класса. Используется MD5 только для совместимости с устаревшими приложениями и данными.
Конструкторы
MD5() | Инициализирует новый экземпляр MD5. |
HashSizeInBits | Хэш-размер, создаваемый алгоритмом MD5 в битах. |
HashSizeInBytes | Хэш-размер, созданный алгоритмом MD5 в байтах. |
HashSizeValue | Представляет размер вычисленного хэш-кода в битах. (Унаследовано от HashAlgorithm) |
HashValue | Представляет значение вычисляемого хэш-кода. (Унаследовано от HashAlgorithm) |
State | Представляет состояние процесса вычисления хэша. (Унаследовано от HashAlgorithm) |
Свойства
CanReuseTransform | Получает значение, указывающее на возможность повторного использования текущего преобразования. (Унаследовано от HashAlgorithm) |
CanTransformMultipleBlocks | Если переопределено в производном классе, возвращает значение, указывающее, возможно ли преобразование нескольких блоков. (Унаследовано от HashAlgorithm) |
Hash | Получает значение вычисленного хэш-кода. (Унаследовано от HashAlgorithm) |
HashSize | Получает размер вычисленного хэш-кода в битах. (Унаследовано от HashAlgorithm) |
InputBlockSize | При переопределении в производном классе получает размер входного блока. (Унаследовано от HashAlgorithm) |
OutputBlockSize | При переопределении в производном классе получает размер выходного блока. (Унаследовано от HashAlgorithm) |
Методы
Clear() | Освобождает все ресурсы, используемые классом HashAlgorithm. (Унаследовано от HashAlgorithm) |
ComputeHash(Byte[]) | Вычисляет хэш-значение для заданного массива байтов. (Унаследовано от HashAlgorithm) |
ComputeHash(Byte[], Int32, Int32) | Вычисляет хэш-значение для заданной области заданного массива байтов. (Унаследовано от HashAlgorithm) |
ComputeHash(Stream) | Вычисляет хэш-значение для заданного объекта Stream. (Унаследовано от HashAlgorithm) |
ComputeHashAsync(Stream, CancellationToken) | Асинхронно вычисляет хэш-значение для заданного объекта Stream. (Унаследовано от HashAlgorithm) |
Create() | Создает экземпляр реализации по умолчанию хэш-алгоритма MD5. |
Create(String) | Создает экземпляр заданной реализации хэш-алгоритма MD5. |
Dispose() | Освобождает все ресурсы, используемые текущим экземпляром класса HashAlgorithm. (Унаследовано от HashAlgorithm) |
Dispose(Boolean) | Освобождает неуправляемые ресурсы, используемые объектом HashAlgorithm, а при необходимости освобождает также управляемые ресурсы. (Унаследовано от HashAlgorithm) |
Equals(Object) | Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() | Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() | Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
HashCore(Byte[], Int32, Int32) | При переопределении в производном классе передает данные, записанные в объект, на вход хэш-алгоритма для вычисления хэша. (Унаследовано от HashAlgorithm) |
HashCore(ReadOnlySpan<Byte>) | Передает записываемые в объект данные в хэш-алгоритм для вычисления хэша. (Унаследовано от HashAlgorithm) |
HashData(Byte[]) | Вычисляет хэш данных с помощью алгоритма MD5. |
HashData(ReadOnlySpan<Byte>) | Вычисляет хэш данных с помощью алгоритма MD5. |
HashData(ReadOnlySpan<Byte>, Span<Byte>) | Вычисляет хэш данных с помощью алгоритма MD5. |
HashData(Stream) | Вычисляет хэш потока с помощью алгоритма MD5. |
HashData(Stream, Span<Byte>) | Вычисляет хэш потока с помощью алгоритма MD5. |
HashDataAsync(Stream, CancellationToken) | Асинхронно вычисляет хэш потока с помощью алгоритма MD5. |
HashDataAsync(Stream, Memory<Byte>, CancellationToken) | Асинхронно вычисляет хэш потока с помощью алгоритма MD5. |
HashFinal() | Если переопределено в производном классе, завершает вычисление хэша после обработки последних данных криптографическим хэш-алгоритмом. (Унаследовано от HashAlgorithm) |
Initialize() | Сбрасывает хэш-алгоритм в исходное состояние. (Унаследовано от HashAlgorithm) |
MemberwiseClone() | Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() | Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
TransformBlock(Byte[], Int32, Int32, Byte[], Int32) | Вычисляет хэш-значение для заданной области входного массива байтов и копирует указанную область входного массива байтов в заданную область выходного массива байтов. (Унаследовано от HashAlgorithm) |
TransformFinalBlock(Byte[], Int32, Int32) | Вычисляет хэш-значение для заданной области заданного массива байтов. (Унаследовано от HashAlgorithm) |
TryComputeHash(ReadOnlySpan<Byte>, Span<Byte>, Int32) | Пытается вычислить хэш-значение для заданного массива байтов. (Унаследовано от HashAlgorithm) |
TryHashData(ReadOnlySpan<Byte>, Span<Byte>, Int32) | Пытается вычислить хэш данных с помощью алгоритма MD5. |
TryHashFinal(Span<Byte>, Int32) | Пытается завершить вычисление хэша после обработки последних данных хэш-алгоритмом. (Унаследовано от HashAlgorithm) |
IDisposable.Dispose() | Освобождает неуправляемые ресурсы, используемые объектом HashAlgorithm, а при необходимости освобождает также управляемые ресурсы. (Унаследовано от HashAlgorithm) |
Применяется к
См. также раздел
- службы шифрования
Можно ли расшифровать хэши MD5?
кто-то сказал мне, что он видел программными системами:
- извлечение MD5 зашифрованных паролей из других систем;
- расшифровать зашифрованные пароли и
- храните пароли в базе данных системы, используя собственный алгоритм системы.
Это возможно? Я думал, что невозможно / возможно расшифровать хэши MD5.
Я знаю, что есть словари MD5, но есть ли фактическая расшифровка алгоритм?
нет. MD5 не является шифрованием (хотя он может использоваться как часть некоторых алгоритмов шифрования), это один из способов хэш-функция. Большая часть исходных данных фактически «потеряна» как часть преобразования.
подумайте об этом: MD5 всегда имеет длину 128 бит. Это означает, что есть 2128 возможные хеши MD5. Это достаточно большое число, и все же оно определенно конечное. И все же существует бесконечное число возможных входных данных для данного хэш-функция (и большинство из них содержат более 128 бит или жалкие 16 байт). Таким образом, на самом деле существует бесконечное количество возможностей для данных, которые будут хэшироваться до одного и того же значения. Что делает хэши интересными, так это то, что невероятно сложно найти две части данных, которые хэшируются с одинаковым значением, и вероятность того, что это произойдет случайно, почти равна 0.
простой пример для (очень небезопасной) хэш-функции (и это иллюстрирует общую идею ее существования односторонним) было бы взять все биты части данных и рассматривать их как большое число. Затем выполните целочисленное деление, используя некоторое большое (возможно, простое) число n и возьмите остальное (см.:модуль). Вам останется некоторое число между 0 и n. Если вы должны были выполнить тот же расчет снова (в любое время, на любом компьютере, в любом месте), используя ту же строку, он придет с тем же значением. И все же, нет никакого способа найти из чего исходное значение было, так как существует бесконечное число чисел, которые имеют этот точный остаток, если разделить на n.
тем не менее, было обнаружено, что MD5 имеет некоторые слабые стороны, такие, что с некоторой сложной математикой можно найти столкновение, не пробуя 2128 возможных входных строк. И тот факт, что большинство паролей короткие, и люди часто используют общие значения (например, «пароль» или «секрет») означает, что в некоторых случаях, вы можете сделать достаточно хорошее предположение о чьем-то пароле, погуглив для хэша или используя Радужный таблице. Это одна из причин, почему вы всегда должны «соль » хэшированные пароли, так что два одинаковых значения при хэшировании не будут хэшироваться до одного и того же значения.
Как только часть данных была запущена через хэш-функцию, возврата нет.
369
поделиться
автор: Adam Batkin
вы не можете — в теории. Весь смысл гашиша в том, что это только один способ. Это означает, что если кому-то удается получить список хэшей, они все равно не могут получить ваш пароль. Кроме того, это означает, что даже если кто-то использует один и тот же пароль на нескольких сайтах (да, мы все знаем, что мы не должны, но…) у кого есть доступ к базе данных сайта, не сможет использовать пароль пользователя на сайте Б.
тот факт, что MD5 является хэшем, также означает, что он теряет информацию. Для любого данного MD5-хэш, если вы позволите пароли произвольной длины может быть несколько паролей, которые производят один и тот же хэш. Для хорошего хэша было бы вычислительно невозможно найти их за пределами довольно тривиальной максимальной длины, но это означает, что нет гарантия что если вы найдете пароль, который имеет целевой хэш, это определенно оригинальный пароль. Это астрономически маловероятно что вы увидите два ASCII-только, пароли разумной длины, которые имеют тот же MD5 гашиш, но это не невозможно.
MD5-плохой хэш для использования паролей:
- это быстро, что означает, что если у вас есть «целевой» хэш, дешево попробовать много паролей и посмотреть, сможете ли вы найти тот, который хэширует эту цель. Соление не помогает с это сценарий, но это помогает сделать его более дорогим, чтобы попытаться найти пароль, соответствующий любой одной из несколько хэшей с использованием различных солей.
- Я считаю, что она известные недостатки, которые облегчают поиск коллизий, хотя поиск коллизий в печатаемом тексте (а не произвольных двоичных данных), по крайней мере, будет сложнее.
Я не эксперт по безопасности, поэтому не буду делать конкретную рекомендацию за пределами «не сворачивайте свою собственную систему аутентификации.- Найди его у уважаемого поставщика и используй. Как разработка и внедрение систем безопасности-это сложный бизнес.
151
поделиться
автор: Jon Skeet
технически, это ‘возможно’, а при очень жесткие условия (радужные таблицы, грубое принуждение на основе очень малой возможности того, что пароль пользователя находится в этой хэш-базе данных).
но это не значит, что это
- жизнеспособных
или - безопасное
вы не хотите ‘reverse’ an MD5 в хэш. используя методы, описанные ниже, вы будете и не нужно. «Реверсирование» MD5 фактически считается вредоносного — несколько веб-сайтов предлагают возможность «взломать» и bruteforce MD5 хэши-но все они являются массивными базами данных, содержащих словарные слова, ранее представленные пароли и другие слова. Есть очень маленький шанс что у него будет хэш MD5, который вам нужен. и если ты соленое хэш MD5-это тоже не сработает! 🙂
путь входа с MD5 хэширования должны работа:
При Регистрации:
Пользователь создает пароль — > пароль хэшируется с помощью MD5 — > хэш, хранящийся в базе данных
При Входе В Систему:
Пользователь вводит имя пользователя и пароль — > (имя пользователя проверено) пароль хэшируется с помощью MD5 — > хэш сравнивается с сохраненным хэшем в база данных
когда «потерянный пароль» необходим:
2 варианта:
- пользователь отправил случайный пароль для входа в систему, а затем прослушивается, чтобы изменить его при первом входе в систему.
или
- пользователю отправляется ссылка на изменение пароля (с дополнительной проверкой, если у вас есть секретный вопрос / etc) , а затем новый пароль хэшируется и заменяется старый пароль в базе данных
50
поделиться
автор: Daniel May
не напрямую. Из-за принципу Дирихле, существует (вероятно) более одного значения, которое хэширует любой заданный вывод MD5. Как таковой, вы не можете изменить его с уверенностью. Кроме того, MD5 сделан, чтобы сделать его трудно найти любой такой обратный хэш (однако были атаки, которые производят конфликты — то есть, производят два значения, которые хэшируют к тому же результату, но вы не можете контролировать, что результирующее значение MD5 будет быть.)
однако, если вы ограничите пространство поиска, например, общими паролями с длиной под N, у вас может больше не быть свойства необратимости (потому что количество выходов MD5 намного больше, чем количество строк в интересующей области). Тогда вы можете использовать Радужный таблице или аналогично обратным хэшам.
30
поделиться
автор: bdonlan
невозможно, по крайней мере, не в разумное количество времени.
кстати, это часто используется пароль «сброс». То есть вы даете им новый (случайный) пароль и отправляете их по электронной почте.
13
поделиться
автор: Matthew Groves
вы не можете вернуть пароль md5.(на любом языке)
но можно:
дайте пользователю новый.
регистрация в некоторых радужных таблиц может извлечь старый.
12
поделиться
автор: Nettogrof
нет, он, должно быть, запутался в словарях MD5.
криптографические хэши (MD5 и т. д…) are один из способов и вы не можете вернуться к исходному сообщению и только дайджест если у вас есть другая информация об исходном сообщении и т. д. что ты не должен.
9
поделиться
автор: Robert Greiner
расшифровка (непосредственно получение простого текста из хэшированного значения алгоритмическим способом), нет.
существуют, однако, методы, которые используют то, что известно как Радужный таблице. Это вполне возможно, если ваши пароли хэшируются без соли.
8
поделиться
автор: Sinan Taifour
MD5-это алгоритм хэширования, вы не можете вернуть хэш-значение.
вы должны добавить «change password feature», где пользователь дает другой пароль, вычисляет хэш и сохраняет его как новый пароль.
7
поделиться
автор: Svetlozar Angelov
нет простого способа сделать это. Это своего рода точка хэширования пароля в первую очередь. 🙂
одна вещь, вы должны быть в состоянии сделать, это установить временный пароль для них вручную и отправить их.
Я не решаюсь упомянуть об этом, потому что это плохая идея (и это не гарантирует работу в любом случае), но вы можете попробовать найти хэш в радужной таблице, как milw0rm чтобы узнать, можете ли вы восстановить старый пароль, который путь.
7
поделиться
автор: Bill the Lizard
см. все другие ответы здесь о том, как и почему это не обратимо и почему вы все равно не захотите.
для полноты, хотя, есть радужные таблицы который вы можете найти возможные совпадения. Нет никакой гарантии, что ответ в таблице rainbow будет оригинальным паролем, выбранным вашим пользователем, чтобы сильно запутать их.
кроме того, это не будет работать для соленых хэшей. соление рекомендуется много эксперты безопасности.
6
поделиться
автор: Dinah
нет способа «вернуть» хэш-функцию с точки зрения нахождения для нее обратной функции. Как упоминалось ранее, в этом весь смысл наличия хэш-функции. Он не должен быть обратимым, и он должен допускать быстрый расчет хэш-значения. Поэтому единственный способ найти входную строку, которая дает заданное хэш-значение, — это попробовать все возможные комбинации. По этой причине это называется атакой грубой силы.
попытка всех возможных комбинаций занимает много времени и это также причина, по которой хэш-значения используются для хранения паролей относительно безопасным способом. Если злоумышленник может получить доступ к базе данных со всеми паролями пользователей внутри, вы теряете в любом случае. Если у вас есть хэш-значения и (идеалистически говоря) надежные пароли, будет намного сложнее получить пароли из хэш-значений для злоумышленника.
хранение хэш-значений также не является проблемой производительности, потому что вычисление хэш-значения относительно быстро. Так что же самое системы вычисляют хэш-значение пароля, введенного пользователем (что быстро), а затем сравнивают его с сохраненным хэш-значением в своей базе данных пользователей.
4
поделиться
автор: Kage
MD5 считается сломанным, не потому, что вы можете вернуть исходный контент из хэша, но потому, что с работой вы можете создавать два сообщения, которые хэшируются в один хэш.
вы не можете отменить хэш MD5.
3
поделиться
автор: Ned Batchelder
единственное, что может работать (если мы упомянем, что пароли просто хэшируются, без добавления какой-либо соли, чтобы предотвратить атаки воспроизведения, если это так, вы должны знать соль), кстати, получить инструмент атаки словаря, файлы многих слов, чисел и т. д. затем создайте две строки, одна строка-слово, номер (в словаре), другая-хэш слова, и сравните хэши, если они совпадают…
Это единственный способ, не вдаваясь в криптоанализ.
2
поделиться
автор: berkay
да, именно то, что вы просите можно. Невозможно «расшифровать» пароль MD5 без помощи, но можно повторно зашифровать пароль MD5 в другой алгоритм, просто не все за один раз.
то, что вы делаете, это организовать для ваших пользователей, чтобы иметь возможность войти в новую систему, используя старый пароль MD5. В тот момент, когда они входят в систему, они дали вашей программе входа unhashed версия пароля, который вы доказываете, соответствует хэшу MD5, который У вас есть. Затем вы можете преобразовать этот не хэшированный пароль в новый алгоритм хэширования.
очевидно, что это расширенный процесс, потому что вы должны ждать ваших пользователей, чтобы сказать вам, что пароли, но это работает.
(NB: семь лет спустя, ну, надеюсь, кто-то найдет это полезным)
2
поделиться
автор: user3710044
вы можете найти онлайн-инструменты, которые используют словарь для получения исходного сообщения.
в некоторых случаях метод словаря может быть просто бесполезным:
- если сообщение хэшируется с помощью сообщения соли
- если сообщение хэш более одного раза
например, вот один MD5 в декриптер онлайн-инструмент.
2
поделиться
автор: davitz38
нет,это невозможно. Либо вы можете использовать словарь, либо вы можете попробовать хэшировать разные значения, пока не получите хэш, который вы ищете. Но его нельзя «расшифровать».
1
поделиться
автор: Vilx-
MD5 имеет свои недостатки (см. Википедия), поэтому есть некоторые проекты, которые пытаются предварительно вычислить хэши. Википедия также намекает на некоторые из этих проектов. Одно я знаю (и уважаю) это ophrack. Вы не можете сказать пользователю свой собственный пароль, но вы можете сказать им пароль, который работает. Но я думаю: просто напишите thrm новый пароль на случай, если они забыли.
1
поделиться
автор: dz.
алгоритм хэша MD5 не является обратимым, поэтому декодирование MD5 невозможно, но на некоторых веб-сайтах есть массовый набор паролей, поэтому вы можете попробовать онлайн для декодирования хэша MD5.
попробуйте онлайн :
MD5 расшифровать
md5online
md5decrypter
1
поделиться
автор: Girish Patidar
в теории невозможно расшифровать хэш-значение но у вас есть некоторые грязные методы для получения исходного обычного текста.
- Bruteforcing: все алгоритмы компьютерной безопасности страдают bruteforcing. Основываясь на этой идее, сегодняшний GPU использует идею параллельного программирования, с помощью которого он может вернуть обычный текст, массово bruteforcing его с помощью любого графического процессора. Этот инструмент hashcat тут эта работа. Последний раз, когда я проверял технологии CUDA версия этого, я смог bruteforce 7 письмо длинный символ в течение шести минут.
- поиск в интернет: просто скопируйте и вставьте хэш в Google и посмотрите, сможете ли вы найти там соответствующий открытый текст. Это не решение, когда вы pentesting что-то, но это определенно стоит попробовать. Некоторые веб-сайты поддерживают хэш почти для всех слов в словаре.
1
поделиться
автор: vikkyhacks
нет, невозможно отменить хэш-функцию, такую как MD5: учитывая выходное хэш-значение, невозможно найти входное сообщение, если не известно достаточно информации о входном сообщении.
Decryption не является функцией, определенной для хэш-функции; шифрование и дешифрование являются функциями шифр такие как 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 (пароль ключа функция деривации) вместо. Такая функция определяет, как использовать соль вместе с хэш. Таким образом, идентичные хэши не будут генерироваться для идентичных паролей (от других пользователей или в других базах данных). Пароль: хэши по этой причине также не позволяют использовать радужные таблицы, пока соль достаточно велика и правильно рандомизирована.
хэши паролей также содержать работа-фактор (иногда настраивается с помощью итераций), что может значительно замедлить атаки, которые пытаются найти пароль, учитывая значение соли и хэша. Это важно, так как база данных с солями и хэш-значениями может быть украдена. Наконец, хэш пароля также может быть памяти-жесткий таким образом, для вычисления хэша требуется значительный объем памяти. Это делает невозможным использование специального оборудования (GPU, ASIC, FPGA и т. д.) чтобы позволить злоумышленнику ускорить поиск. Другие входные данные или параметры конфигурации, такие как перец или количество распараллеливания, также могут быть доступны для хэша пароля.
это, однако, все равно позволит кому-либо проверить пароль, данный H(X)
даже если H(X)
— это хэш пароля. Пароль: хэши по-прежнему детерминированы, поэтому, если кто-то знает все входные данные и сам алгоритм хэша, то X
может использоваться для расчета H(X)
и-снова-результаты можно сравнить.
обычно используемые хэши паролей bcrypt, скрипт и PBKDF2 с. Существует также Argon2 в различных формах, который является победителем разумно недавнего конкурса хэширования паролей. здесь, на CrackStation is хороший пост в блоге о защите паролем.
можно сделать невозможным для противников выполнить вычисление хэша, чтобы убедиться, что пароль правильный. Для этого перец можно использовать в качестве ввода хэша пароля. В качестве альтернативы хэш-значение, конечно, может быть зашифровано с помощью шифра, такого как AES и режим работы, такой как CBC или GCM. Это, однако, требует хранение секретного ключа независимо и с более высоким доступом требования, чем хэш пароля.
1
поделиться
автор: Maarten Bodewes
пока невозможно ввести хэш пароля в алгоритм и вернуть пароль в виде обычного текста, потому что хэширование-это один из способов. Но то, что люди сделали, — это создать хэши и сохранить их в большой таблице, чтобы при вводе определенного хэша он проверял таблицу на пароль, который соответствует хэшу, и возвращал этот пароль вам. Пример сайта, который делает это, являетсяhttp://www.md5online.org/ . Современные пароля счетчиков системы хранения используя алгоритм соления, при вводе одного и того же пароля в поле пароля при регистрации генерируются разные хэши.
-1
поделиться
автор: Ogbe
нет, вы не можете расшифровать/отменить md5, поскольку это одностороннее шифрование. но на некоторых веб-сайтах есть большой набор паролей базы данных, поэтому вы можете попробовать онлайн декодировать свою хэш-строку MD5 или SHA1. Я попробовал сайт как http://www.mycodemyway.com/encrypt-and-decrypt/md5 и его работа отлично для меня, но это полностью зависит от вашего хэша, если этот хэш хранится в этой базе данных, то вы можете получить фактическую строку.
-1
поделиться
автор: Rafi Ahmad
MD5 | это… Что такое MD5?
Проверить информацию. Необходимо проверить точность фактов и достоверность сведений, изложенных в этой статье. |
Информация в этой статье или некоторых её разделах устарела. Вы можете помочь проекту, обновив её и убрав после этого данный шаблон. |
MD5 (англ. Message Digest 5) — устаревший, криптографически взломанный,[1] 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году. Предназначен для создания «отпечатков» или дайджестов сообщения произвольной длины и последующей проверки их подлинности. Программистам, владельцам веб-сайтов, пользователям следует избегать использования MD5 в любых целях. [1] Одной из альтернатив являются алгоритмы семейства SHA-2.
Содержание
|
История
MD5 — один из серии алгоритмов по построению дайджеста сообщения, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института. Был разработан в 1991 году, как более надёжный вариант предыдущего алгоритма MD4.[2] Описан в RFC 1321.[3] Позже Гансом Доббертином были найдены недостатки алгоритма MD4.
В 1993 году Берт ден Бур (Bert den Boer) и Антон Босселарс (Antoon Bosselaers) показали, что в алгоритме возможны псевдоколлизии, когда разным инициализирующим векторам соответствуют одинаковые дайджесты для входного сообщения.
В 1996 году Ганс Доббертин (Hans Dobbertin) объявил о коллизии в алгоритме и уже в то время было предложено использовать другие алгоритмы хеширования, такие как Whirlpool, SHA-1 или RIPEMD-160.
Из-за небольшого размера хеша в 128 бит, можно рассматривать birthday атаки. В марте 2004 года был запущен проект MD5CRK с целью обнаружения уязвимостей алгоритма, используя birthday атаки. Проект MD5CRK закончился 17 августа 2004 года, когда Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) обнаружили уязвимости в алгоритме.
1 марта 2005 года Arjen Lenstra, Xiaoyun Wang и Benne de Weger продемонстрировали построение двух X.509 документов с различными открытыми ключами и одинаковым хешем MD5.
18 марта 2006 года исследователь Властимил Клима (Vlastimil Klima) опубликовал алгоритм, который может найти коллизии за одну минуту на обычном компьютере, метод получил название «туннелирование».
В конце 2008 года US-CERT призвал разработчиков программного обеспечения, владельцев веб-сайтов и пользователей прекратить использовать MD5 в любых целях, так как исследования продемонстрировали ненадёжность этого алгоритма.[1]
Алгоритм MD5
Схема работы алгоритма MD5
На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.
Ниже приведены 5 шагов алгоритма:
Шаг 1. Выравнивание потока
Сначала дописывают единичный бит в конец потока (байт 0x80), затем необходимое число нулевых бит. Входные данные выравниваются так, чтобы их новый размер был сравним с 448 по модулю 512 (). Выравнивание происходит, даже если длина уже сравнима с 448.
Шаг 2.
Добавление длины сообщенияВ оставшиеся 64 бита дописывают 64-битное представление длины данных (количество бит в сообщении) до выравнивания. Сначала записывают младшие 4 байта. Если длина превосходит , то дописывают только младшие биты. После этого длина потока станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.
Шаг 3. Инициализация буфера
Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами (шестнадцатеричное представление, сначала младший байт):
А = 01 23 45 67; В = 89 AB CD EF; С = FE DC BA 98; D = 76 54 32 10.
В этих переменных будут храниться результаты промежуточных вычислений. Начальное состояние ABCD называется инициализирующим вектором.
Определим ещё функции и константы, которые нам понадобятся для вычислений.
- Потребуются 4 функции для четырёх раундов. Введём функции от трёх параметров — слов, результатом также будет слово.
- 1 раунд .
- 2 раунд .
- 3 раунд .
- 4 раунд .
- Определим таблицу констант — 64-элементная таблица данных, построенная следующим образом: , где .[4]
- Выровненные данные разбиваются на блоки (слова) по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: [abcd k s i], определяемый как , где X — блок данных. X[k] = M [n * 16 + k], где k — номер 32-битного слова из n-го 512-битного блока сообщения, и — циклический сдвиг влево на бит полученного 32-битного аргумента.
Шаг 4. Вычисление в цикле
Заносим в блок данных элемент n из массива. Сохраняются значения A, B, C и D, оставшиеся после операций над предыдущими блоками (или их начальные значения, если блок первый).
- AA = A
- BB = B
- CC = C
- DD = D
Раунд 1
/*[abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ [ABCD 0 7 1][DABC 1 12 2][CDAB 2 17 3][BCDA 3 22 4] [ABCD 4 7 5][DABC 5 12 6][CDAB 6 17 7][BCDA 7 22 8] [ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12] [ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]
Раунд 2
/*[abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ [ABCD 1 5 17][DABC 6 9 18][CDAB 11 14 19][BCDA 0 20 20] [ABCD 5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA 4 20 24] [ABCD 9 5 25][DABC 14 9 26][CDAB 3 14 27][BCDA 8 20 28] [ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]
Раунд 3
/*[abcd k s i] a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ [ABCD 5 4 33][DABC 8 11 34][CDAB 11 16 35][BCDA 14 23 36] [ABCD 1 4 37][DABC 4 11 38][CDAB 7 16 39][BCDA 10 23 40] [ABCD 13 4 41][DABC 0 11 42][CDAB 3 16 43][BCDA 6 23 44] [ABCD 9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA 2 23 48]
Раунд 4
/*[abcd k s i] a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ [ABCD 0 6 49][DABC 7 10 50][CDAB 14 15 51][BCDA 5 21 52] [ABCD 12 6 53][DABC 3 10 54][CDAB 10 15 55][BCDA 1 21 56] [ABCD 8 6 57][DABC 15 10 58][CDAB 6 15 59][BCDA 13 21 60] [ABCD 4 6 61][DABC 11 10 62][CDAB 2 15 63][BCDA 9 21 64]
Суммируем с результатом предыдущего цикла:
A = AA + A B = BB + B C = CC + C D = DD + D
После окончания цикла необходимо проверить, есть ли ещё блоки для вычислений. Если да, то изменяем номер элемента массива (n++) и переходим в начало цикла.
Шаг 5. Результат вычислений
Результат вычислений находится в буфере ABCD, это и есть хеш. Если выводить побайтово, начиная с младшего байта A и закончив старшим байтом D, то мы получим MD5-хеш.
Сравнение MD5 и MD4
Алгоритм MD5 происходит от MD4. В новый алгоритм добавили ещё один раунд, теперь их стало 4 вместо 3 в MD4. Добавили новую константу для того, чтобы свести к минимуму влияние входного сообщения, в каждом раунде на каждом шаге и каждый раз константа разная, она суммируется с результатом F и блоком данных. Изменилась функция G = XZ v (Y not(Z)) вместо (XY v XZ v YZ). Результат каждого шага складывается с результатом предыдущего шага, из-за этого происходит более быстрое изменение результата. Изменился порядок работы с входными словами в раундах 2 и 3.
Различия в скорости работы представлены в таблице:
MD5 | MD4 | |||
---|---|---|---|---|
RFC | 2,614 сек | 37 359 Кб/с | 2,574 сек | 37 940 Кб/с |
OpenSSL | 1,152 сек | 84 771 Кб/с | 0,891 сек | 109 603 Кб/с |
Необходимо было вычислить 10 000 хешей для сообщения длиной 10 000 байт. В качестве реализаций использовались OpenSSL и RFC 1321.
MD5-хеши
Хеш содержит 128 бит (16 байт) и обычно представляется как последовательность из 32 шестнадцатеричных цифр.
Несколько примеров хеша:
MD5("md5") = 1bc29b36f623ba82aaf6724fd3b16718
Даже небольшое изменение входного сообщения (в нашем случае на один бит: ASCII символ «5» с кодом 0x3516 = 0001101012 заменяется на символ «4» с кодом 0x3416 = 0001101002) приводит к полному изменению хеша. Такое свойство алгоритма называется лавинным эффектом.
MD5("md4") = c93d3bf7a7c4afe94b64e30c2ce39f4f
Пример MD5-хеша для «нулевой» строки:
MD5("") = d41d8cd98f00b204e9800998ecf8427e
Криптоанализ
На данный момент существуют несколько видов «взлома» хешей MD5 — подбора сообщения с заданным хешем:
- Перебор по словарю
- Brute-force
- RainbowCrack
Атаки переборного типа
Для полного перебора или перебора по словарю можно использовать программы PasswordsPro[5], MD5BFCPF[6], John the Ripper. Для перебора по словарю существуют готовые словари.[7]
RainbowCrack — ещё один метод взлома хеша. Он основан на генерировании большого количества хешей из набора символов, чтобы по получившейся базе вести поиск заданного хеша. Хотя генерация хешей занимает много времени, зато последующий взлом производится очень быстро.
Коллизии MD5
Коллизия хеш-функции — это получение одинакового значения функции для разных сообщений и идентичного начального буфера. В отличие от коллизий, псевдоколлизии определяются как равные значения хеша для разных значений начального буфера, причём сами сообщения могут совпадать или отличаться. В 1996 году Ганс Доббертин нашёл псевдоколлизии в MD5, используя определённые инициализирующие векторы, отличные от стандартных. Оказалось, что можно для известного сообщения построить второе, такое, что оно будет иметь такой же хеш, как и исходное. C точки зрения математики это означает: MD5(IV,L1) = MD5(IV,L2), где IV — начальное значение буфера, а L1 и L2 — различные сообщения. Например, если взять начальное значение буфера:
A = 0x12AC2375 В = 0x3B341042 C = 0x5F62B97C D = 0x4BA763ED
и задать входное сообщение
AA1DDABE | D97ABFF5 | BBF0E1C1 | 32774244 |
1006363E | 7218209D | E01C136D | 9DA64D0E |
98A1FB19 | 1FAE44B0 | 236BB992 | 6B7A779B |
1326ED65 | D93E0972 | D458C868 | 6B72746A |
то, добавляя число к определённому 32-разрядному слову в блочном буфере, можно получить второе сообщение с таким же хешем. Ханс Доббертин представил такую формулу:
Тогда MD5(IV, L1) = MD5(IV, L2) = BF90E670752AF92B9CE4E3E1B12CF8DE.
В 2004 году китайские исследователи Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) объявили об обнаруженной ими уязвимости в алгоритме, позволяющей за небольшое время (1 час на кластере IBM p690 (англ. )) находить коллизии.[8][9]
В 2005 году Ван Сяоюнь и Юй Хунбо из университета Шаньдуна в Китае опубликовали алгоритм, который может найти две различные последовательности в 128 байт, которые дают одинаковый MD5-хеш. Одна из таких пар (отличающиеся разряды выделены):
d131dd02c5e6eec4693d9a0698aff95c | 2fcab58712467eab4004583eb8fb7f89 |
55ad340609f4b30283e488832571415a | 085125e8f7cdc99fd91dbdf280373c5b |
d8823e3156348f5bae6dacd436c919c6 | dd53e2b487da03fd02396306d248cda0 |
e99f33420f577ee8ce54b67080a80d1e | c69821bcb6a8839396f9652b6ff72a70 |
и
d131dd02c5e6eec4693d9a0698aff95c | 2fcab50712467eab4004583eb8fb7f89 |
55ad340609f4b30283e4888325f1415a | 085125e8f7cdc99fd91dbd7280373c5b |
d8823e3156348f5bae6dacd436c919c6 | dd53e23487da03fd02396306d248cda0 |
e99f33420f577ee8ce54b67080280d1e | c69821bcb6a8839396f965ab6ff72a70 |
Каждый из этих блоков даёт MD5-хеш, равный 79054025255fb1a26e4bc422aef54eb4.
Метод Ван Сяоюня и Юй Хунбо
Метод Ван Сяоюня и Юй Хунбо использует тот факт, что MD5 построен на итерационном методе Меркла-Дамгарда. Поданный на вход файл сначала дополняется, так чтобы его длина была кратна 64 байтам, после этого он делится на блоки по 64 байта каждый M0,M1,…,Mn-1. Далее вычисляется последовательность 16-байтных состояний s0,…,sn по правилу si+1=f(si,Mi), где f некоторая фиксированная функция. Начальное состояние s0 называется инициализирующим вектором.
Метод позволяет для заданного инициализирующего вектора найти две пары и , такие что . Важно отметить, что этот метод работает для любого инициализирующего вектора, а не только для вектора используемого по стандарту.
Эта атака является разновидностью дифференциальной атаки, которая, в отличие от других атак этого типа, использует целочисленное вычитание а не XOR в качестве меры разности. При поиске коллизий используется метод модификации сообщений: сначала выбирается произвольное сообщение M0, далее оно модифицируется по некоторым правилам, сформулированным в статье, после чего вычисляется дифференциал хеш-функции, причём с вероятностью 2−37. К и применяется функция сжатия для проверки условий коллизии; далее выбирается произвольное , модифицируется, вычисляется новый дифференциал, равный нулю с вероятностью 2−30, а равенство нулю дифференциала хеш-функции как раз означает наличие коллизии. Оказалось, что найдя одну пару и , можно менять лишь два последних слова в , тогда для нахождения новой пары и требуется всего около 239 операций хеширования.
Применение этой атаки к MD4 позволяет найти коллизию меньше чем за секунду. Она также применима к другим хеш-функциям, таким как RIPEMD и HAVAL.
В 2006 году чешский исследователь Властимил Клима опубликовал алгоритм, позволяющий находить коллизии на обычном компьютере с любым начальным вектором (A,B,C,D) при помощи метода, названного им «туннелирование». [10][11]
Примеры использования
Ранее считалось, что MD5 позволяет получать относительно надёжный идентификатор для блока данных. Такое свойство алгоритма широко применялось в разных областях. Оно позволяет искать дублирующиеся файлы на компьютере, сравнивая MD5 файлов, а не их содержимое. Как пример, dupliFinder — графическая программа под Windows и Linux.
С помощью MD5 проверяли целостность скачанных файлов — так, некоторые программы идут вместе со значением хеша. Например, диски для инсталляции.
MD5 использовался для хеширования паролей. В системе UNIX каждый пользователь имеет свой пароль и его знает только пользователь. Для защиты паролей используется хеширование. Предполагалось, что получить настоящий пароль можно только полным перебором. При появлении UNIX единственным способом хеширования был DES (Data Encryption Standard), но им могли пользоваться только жители США, потому что исходные коды DES нельзя было вывозить из страны. Во FreeBSD решили эту проблему. Пользователи США могли использовать библиотеку DES, а остальные пользователи имеют метод, разрешённый для экспорта. Поэтому в FreeBSD стали использовать MD5 по умолчанию.[12]. Некоторые Linux-системы также используют MD5 для хранения паролей.
Многие системы используют базу данных для хранения паролей и существует несколько способов для хранения паролей.
- Пароли хранятся как есть. При взломе такой базы все пароли станут известны.
- Хранятся только хеши паролей (с помощью MD5, SHA). Найти пароли можно только полным перебором. Но при условии использования несложного, популярного или просто несчастливого пароля (который встречался ранее и занесён в таблицу) такая задача решается за доли секунды. Пароль из таблицы был найден всего за 0,036059 сек.[13]
- Хранятся хеши паролей и несколько случайных символов. К каждому паролю добавляется несколько случайных символов (их ещё называют «salt» или «соль») и результат ещё раз хешируется. Например, md5(md5(pass)+word). Найти пароль с помощью таблиц таким методом не получится.
способ | id | login | password |
---|---|---|---|
1 | 5 | anton | mydata |
2 | 5 | anton | md5(mydata) |
3 | 5 | anton | md5(md5(mydata)+word) и word |
Существует несколько надстроек над MD5.
- MD5 (HMAC) — HMAC — Keyed-Hashing for Message Authentication (хеширование с ключом для аутентификации сообщения) — алгоритм позволяет хешировать входное сообщение L с некоторым ключом K, такое хеширование позволяет аутентифицировать подпись.
- MD5 (Base64) — здесь полученный MD5-хеш кодируется алгоритмом Base64.
- MD5 (Unix) — алгоритм вызывает тысячу раз стандартный MD5.
См. также
- Md5sum (программа)
Примечания
- ↑ 1 2 3 MD5 vulnerable to collision attacks
- ↑ What are MD2, MD4, and MD5? (англ. ). RSA Laboratories (2000). Архивировано из первоисточника 24 августа 2011. Проверено 11 июля 2009.
- ↑ R. Rivest. The MD5 Message-Digest Algorithm (рус.) (апрель 1992). Архивировано из первоисточника 24 августа 2011. Проверено 19 ноября 2008.
- ↑ Иными словами, в таблице представлены по 32 бита после десятичной запятой от значений функции sin.
- ↑ PasswordsPro. InsidePro Software. — Программа для восстановления паролей к хешам различных типов. Архивировано из первоисточника 24 августа 2011. Проверено 19 ноября 2008.
- ↑ Проект MD5 на сайте SourceForge.net
- ↑ CERIAS — Security Archive. Center for Education and Research in Information Assurance and Security (июнь 2000). Проверено 19 ноября 2008.
- ↑ Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD (англ. ) (17 августа 2004). Архивировано из первоисточника 24 августа 2011. Проверено 19 ноября 2008.
- ↑ Philip Hawkes, Michael Paddon, Gregory G. Rose. Musings on the Wang et al. MD5 Collision (англ.) (13 октября 2004). Архивировано из первоисточника 24 августа 2011. Проверено 19 ноября 2008.
- ↑ Vlastimil Kli’ma. Tunnels in Hash Functions: MD5 Collisions Within a Minute (англ.) (17 апреля 2006). Архивировано из первоисточника 24 августа 2011. Проверено 19 ноября 2008.
- ↑ Vlastimil Klima. MD5 collisions (англ.). Архивировано из первоисточника 24 августа 2011. Проверено 19 ноября 2008.
- ↑ Bill Swingle. Руководство FreeBSD (DES, MD5 и шифрование) (2006). Архивировано из первоисточника 24 августа 2011. Проверено 20 ноября 2008.
- ↑ An Online MD5 Hash Database. Архивировано из первоисточника 24 августа 2011. Проверено 20 ноября 2008.
Ссылки
- RFC 1321
- API и известные библиотеки для генерации MD5
- Си: Reference Implementation в стандарте RFC 1321 от RSA Security (англ.)
- Java: http://java.sun.com/j2se/1.4.2/docs/api/java/security/MessageDigest.html — Java Cryptography Architecture
- JavaScript: Реализация MD5 от Пола Джонсона
- .NET: Cryptographic Services
- Perl : Digest::MD5
- PHP: md5() function
- C: реализация функции для получения md5 хэша
- MD5 Homepage (unofficial) — Неофициальный ресурс по MD5 содержащий реализации под большое количество различных языков и платформ
- quick md5 hash & hmac online generator
404: Страница не найдена
Страница, которую вы пытались открыть по этому адресу, похоже, не существует. Обычно это результат плохой или устаревшей ссылки. Мы приносим свои извинения за доставленные неудобства.
Что я могу сделать сейчас?
Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:
Поиск- Узнайте последние новости.
- Наша домашняя страница содержит самую свежую информацию об информационной безопасности.
- Наша страница о нас содержит дополнительную информацию о сайте SearchSecurity, на котором вы находитесь.
- Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.
Просмотр по категории
ПоискСеть
- Valmont Industries тестирует сеть как услугу для улучшения WAN
Valmont Industries нужна гибкая глобальная сеть, которую компания может модифицировать за несколько дней, а не месяцев. Мировой производитель тестирует …
- Советы по подготовке к аудиту аварийного восстановления сети
Предприятия могут проводить аудит своих планов аварийного восстановления сети, чтобы обеспечить тщательную защиту и подготовку. Учитывайте такие факторы, как …
- Как искусственный интеллект и машинное обучение в Open RAN упрощают работу сети
Включение ИИ и машинного обучения в сети Open RAN может помочь операторам мобильной связи упростить операции и предоставить расширенные возможности 5G с высокой …
ПоискCIO
- Компаниям необходим план конфиденциальности данных, прежде чем присоединиться к метавселенной
Эксперты, выступавшие на конференции ITIF по политике в области дополненной и виртуальной реальности, отметили, что предприятиям необходимо идти в метавселенную с сильным …
- Инфляция в сфере ИТ-услуг следует более широкой тенденции рынка
ИТ-директора могут рассчитывать платить больше за консультационные и профессиональные услуги, поскольку ценообразование в этом секторе продолжает повышаться …
- 10 примеров смарт-контрактов на блокчейне
Смарт-контракты
поддерживают корпоративный блокчейн за счет автоматизации задач. Эти примеры использования демонстрируют преимущества и проблемы ИТ …
SearchEnterpriseDesktop
- Как выполнить сброс до заводских настроек на рабочем столе Windows 11
Возврат к заводским настройкам может потребоваться, если у устройства возникают проблемы с производительностью или оно настроено на переход к новому пользователю. ИТ может выполнить этот процесс…
- HP и Dell сообщают о снижении продаж ПК из-за колебания спроса со стороны бизнеса
Предприятия откладывают и сокращают заказы на настольные компьютеры и ноутбуки от HP и Dell, сообщили руководители. На рынке ПК насчитывается …
- Введение в Edge Chromium против Edge
Переход на Chromium улучшил несколько аспектов браузера Microsoft Edge — от настроек конфиденциальности до надежности.
SearchCloudComputing
- Упростите управление пакетами с помощью этого руководства по Azure Artifacts
Расширение службы Azure DevOps, Azure Artifacts, может помочь разработчикам управлять пакетами и обмениваться ими, чтобы оптимизировать общую. ..
- Oracle оптимизирует расходы на AWS, поддержку многооблачных баз данных
Oracle разрешает пользователям своих баз данных получать доступ к этим сервисам в конкурирующих облаках, активно преследуя клиентов AWS в …
- Сравните AWS Glue и Azure Data Factory
AWS Glue и Фабрика данных Azure имеют ключевые отличия, несмотря на то, что являются схожими сервисами. Узнайте, что лучше всего подходит для вашей организации …
ComputerWeekly.com
- Flex Muscle Up Частная беспроводная связь 5G SA, Индустрия 4.0 в передовом производстве
Ведущий поставщик технологий связи совместно с многонациональной компанией по производству электроники объединит частную беспроводную связь 5G SA и Индустрию 4.0 …
- Совет Барнета продлевает контракт Capita
Совет Барнета продлил контракт Capita в рамках отказа от крупного контракта с поставщиком
. - В каталог CISA добавлено шесть новых уязвимостей
CISA добавляет шесть новых уязвимостей в свой список самых разыскиваемых, в том числе одну, появившуюся в 2010 году
Вот все, что вы должны знать
Поскольку консенсус направлен на образованную общественность в отношении цифровой конфиденциальности, неудивительно, что интерес к алгоритмам шифрования растет. Алгоритм MD5 был одним из первых алгоритмов хеширования, вышедших на глобальную арену в качестве преемника алгоритма MD4. Несмотря на уязвимости безопасности, которые появятся в будущем, MD5 остается важной частью инфраструктуры данных во множестве сред.
Прежде чем погрузиться с головой в основную тему, лучше сначала пройтись по базовой концепции хеширования.
Что такое хеширование?
Хэширование заключается в преобразовании общей строки информации в сложную часть данных. Это делается для скремблирования данных, чтобы они полностью преобразовывали исходное значение, делая хешированное значение совершенно отличным от оригинала.
Хэширование использует хеш-функцию для преобразования стандартных данных в нераспознаваемый формат. Эти хеш-функции представляют собой набор математических вычислений, которые преобразуют исходную информацию в их хешированные значения, известные как хэш-дайджест или дайджест в целом. Размер дайджеста всегда одинаков для конкретной хэш-функции, такой как MD5 или SHA1, независимо от размера ввода.
Читайте также: Основные структуры данных и алгоритмы, которые должен знать каждый специалист по обработке и анализу данных
Хеширование имеет два основных варианта использования:
Обычно учетные данные пользователей веб-сайтов хранятся в хешированном формате, чтобы предотвратить чтение паролей третьими лицами. Поскольку хеш-функции всегда дают один и тот же результат для одних и тех же входных данных, сравнение хэшей паролей гораздо более конфиденциально.
Весь процесс выглядит следующим образом:
- Пользователь регистрируется на сайте с новым паролем
- Он передает пароль через хеш-функцию и сохраняет дайджест на сервере
- Когда пользователь пытается войти в систему, он снова вводит пароль
- Повторно пропускает введенный пароль через хеш-функцию для создания дайджеста
- Если вновь созданный дайджест совпадает с дайджестом на сервере, логин верифицируется
Некоторые файлы можно проверить на повреждение данных с помощью хеш-функций. Как и в приведенном выше сценарии, хэш-функции всегда будут давать один и тот же результат для аналогичных входных данных, независимо от параметров итерации.
Весь процесс следует следующему порядку:
- Пользователь загружает файл в Интернет
- Он также загружает хеш-дайджест вместе с файлом
- Когда пользователь загружает файл, он пересчитывает хэш-дайджест
- Если дайджест совпадает с исходным хеш-значением, целостность файла сохраняется
Теперь, когда у вас есть базовая основа для хеширования, вы можете взглянуть на основной предмет этого руководства — алгоритм MD5.
Что такое алгоритм MD5?
MD5 (метод 5 дайджеста сообщения) — это криптографический алгоритм хеширования, используемый для создания 128-битного дайджеста из строки любой длины. Он представляет дайджесты в виде 32-значных шестнадцатеричных чисел.
Рональд Ривест разработал этот алгоритм в 1991 году, чтобы предоставить средства для проверки цифровой подписи. В конце концов, он был интегрирован во множество других фреймворков для поддержки индексов безопасности.
Размер дайджеста всегда равен 128 битам, и благодаря рекомендациям по функциям хеширования незначительное изменение входной строки приводит к совершенно другому дайджесту. Это важно, чтобы максимально предотвратить генерацию одинаковых хэшей, также известную как коллизия хэшей.
Теперь вы изучите этапы работы алгоритма MD5.
шагов алгоритма MD5
Алгоритм состоит из четырех основных разделов:
Биты заполнения
Когда вы получаете входную строку, вы должны убедиться, что размер на 64 бит меньше кратного 512. Когда дело доходит до заполнения битов, вы должны сначала добавить единицу (1), а затем нули, чтобы округлить лишнее. персонажи.
Длина набивки
Вам нужно добавить еще несколько символов, чтобы окончательная строка стала кратной 512. Для этого возьмите длину исходного ввода и выразите ее в виде 64 бит. После их объединения окончательная строка готова к хешированию.
Инициализировать буфер MD
Вся строка преобразуется в несколько блоков по 512 бит каждый. Вам также необходимо инициализировать четыре разных буфера, а именно A, B, C и D. Каждый из этих буферов имеет длину 32 бита и инициализируется следующим образом:0003
А = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
Д = 76 54 32 10
Обработка каждого блока
Каждый 512-битный блок разбивается на 16 подблоков по 32 бита каждый. Существует четыре раунда операций, каждый из которых использует все подблоки, буферы и постоянное значение массива.
Этот массив констант можно обозначить как T[1] -> T[64].
Каждый из подблоков обозначается как M[0] -> M[15].
В соответствии с изображением выше вы видите, что значения выполняются для одного буфера A. Правильный порядок следующий:
- Он передает B, C и D в нелинейный процесс.
- К результату добавляется значение, присутствующее в A.
- Добавляет значение подблока к результату выше.
- Затем добавляется постоянное значение для этой конкретной итерации.
- К строке применен циклический сдвиг.
- В качестве последнего шага он добавляет значение B к строке и сохраняет его в буфере A.
Описанные выше шаги выполняются для каждого буфера и каждого подблока. Когда последний буфер последнего блока будет заполнен, вы получите дайджест MD5.
Описанный выше нелинейный процесс отличается для каждого раунда подблока.
Раунд 1: (b И c) ИЛИ ((НЕ b) И (d))
Раунд 2: (b И d) ИЛИ (c И (НЕ d))
Раунд 3: b Исключающее ИЛИ c Исключающее ИЛИ d
Раунд 4: c исключающее ИЛИ (b ИЛИ (НЕ d))
На этом вы завершаете работу алгоритма MD5. Теперь вы увидите преимущества, получаемые при использовании этого конкретного алгоритма хеширования.
Преимущества MD5
- Простота сравнения. В отличие от последних семейств хеш-алгоритмов, 32-значный дайджест относительно легче сравнивать при проверке дайджеста.
- Хранение паролей: пароли не нужно хранить в текстовом формате, что делает их доступными для хакеров и злоумышленников. При использовании дайджестов база данных также получает ускорение, поскольку размер всех хеш-значений будет одинаковым.
- Низкий ресурс: Для интеграции нескольких служб в одну структуру без накладных расходов ЦП требуется относительно небольшой объем памяти.
- Проверка целостности: Вы можете отслеживать повреждение файлов, сравнивая хэш-значения до и после передачи. Как только хэши совпадают, проверки целостности файлов действительны, и это позволяет избежать повреждения данных.
Создайте свой набор навыков сетевой безопасности и победите хакеров в их собственной игре с Certified Ethical Hacking Course. Ознакомьтесь с предварительным просмотром курса прямо сейчас!
Как Simplilearn может вам помочь?
Семейство алгоритмов дайджеста сообщений является основным во многих системах хеширования по всему миру. У них есть свои недостатки, но их все же можно считать отличным алгоритмом для начинающих криптографических энтузиастов. Помимо этого конкретного предмета, в кибербезопасности есть несколько разделов, которые необходимо изучить, прежде чем начать карьеру в этой сфере деятельности.
Курс Simplilearn «Эксперт по кибербезопасности» будет полезен как новичкам, так и опытным профессионалам. Курс наполнен занятиями, живыми занятиями и прочной базой для начала вашей карьеры в этой прибыльной отрасли, от изучения основ кибербезопасности до обучения ее наиболее сложным аспектам.
Заключение
В этом уроке, посвященном алгоритму MD5, вы сделали небольшой обзор хэширования и его использования в современной отрасли. Вы поняли происхождение MD5 и изучили процесс шифрования информации.
Есть вопросы по теме, которую вы только что изучили? Если да, пожалуйста, прокомментируйте ниже, и мы будем рады ответить на них для вас.
Алгоритм MD5 (с примерами)
В этой статье подробно рассматривается механизм алгоритма MD5. Это наша вторая и последняя часть о хэш-функции MD5, которая является старым и небезопасным алгоритмом, превращающим данные случайной длины в фиксированные 128-битные хэши. Наш Что такое MD5? сосредоточены на MD5:
- Фон
- История
- Приложения
- Проблемы безопасности
На этот раз мы сосредоточимся на том, что на самом деле происходит, когда данные проходят через алгоритм хеширования MD5. Как что-то вроде «Они детерминированы» (это просто случайное предложение, которое мы использовали в другой статье) превращается в такой 128-битный хэш?
23db6982caef9e9152f1a5b2589e6ca3
Как работает алгоритм MD5?Давайте покажем, как работает алгоритм MD5 на примере. Наш ввод «Они детерминированы» становится совершенно другим, когда он проходит через хеш-функцию MD5. Все, что мы можем гарантировать, это то, что он будет иметь длину 128 бит, что составляет 32 символа. Но как алгоритм MD5 может принимать входные данные любой длины и превращать их в кажущиеся случайными строки фиксированной длины?
Преобразование данных в двоичныеКогда мы помещаем «Они являются детерминированными» в хеш-функцию MD5, первое, что происходит, это то, что они преобразуются в двоичные. Это делается в соответствии с Американский стандартный код для обмена информацией (ASCII) , который в основном является стандартом , который мы используем для преобразования удобочитаемого текста в двоичный код, который компьютеры могут читать .
Используя таблицу ASCII, мы видим, что заглавная буква «T» записывается как «01010100» в двоичном формате. Строчная «h» — «01101000», строчная «e» — «01100101», а строчная «y» — «01111001». Двоичный код пробела (SP) — «00100000». Его можно увидеть в таблице вверху второго столбца, в строке с десятичным числом 32.
If we continue on in this fashion, we see that our input, “They are deterministic” is written in binary as:
01010100 01101000 01100101 01111001 00100000 01100001 01110010 01100101 00100000 01100100 01100101 01110100 01100101 01110010 01101101 01101001 01101110 01101001 01110011 01110100 01101001 01100011
Заполнение алгоритма MD5Следующим шагом в MD5 является добавление заполнения . Вводы в MD5 разбиваются на 512-битные блоки с добавлением заполнения для заполнения остального пространства в блоке . Наш ввод имеет длину 22 символа, включая пробелы, и каждый символ имеет длину 8 бит. Это означает, что входные данные составляют 176 бит. При вводе всего 176 бит и 512-битном блоке, который необходимо заполнить, нам нужно 336 бит заполнения для завершения блока.
Схема заполнения MD5 кажется довольно странной. После размещения начальных 176 битов двоичного кода, которые представляют наш ввод, остальная часть блока дополняется одной единицей, а затем достаточным количеством нулей, чтобы довести его длину до 448 бит. Итак:
448 – 1 – 176 = 271
Следовательно, заполнение для этого блока будет включать единицу, а затем дополнительные 271 ноль . Причина, по которой нам нужно дополнить его только до 448 бит (вместо 512), заключается в том, что последние 64 бита (512 — 64 = 448) зарезервированы для отображения длины сообщения в двоичном виде. В этом случае число 176 равно 10110000 в двоичном формате. Это формирует самый конец схемы заполнения, в то время как предыдущие 56 бит (64 минус восемь бит, составляющих 10110000) заполнены нулями.
В случаях, когда длина сообщения занимает большее количество бит, нулей будет меньше. Если исходная длина входных данных превышает 64 бита (если она больше 264, что равно 18 446 744 073 709 551 616 в десятичном виде), то используются только младшие 64 бита.
Термин «младшие значащие биты» по существу означает самые правые числа. Например, если нам нужны только четыре младших бита случайного двоичного числа, такого как 0101 1110 , мы будем ссылаться на 1110 and disregarding the initial 0101.
Once the padding scheme is complete, we end up with the following 512-bit string:
01010100 01101000 01100101 01111001 00100000 01100001 01110010 01100101 00100000 01100100 01100101 01110100 01100101 01110010 01101101 01101001 01101110 01101001 01110011 01110100 01101001 01100011 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10110000
Первые 176 бит (длина варьируется в зависимости от начального ввода) представляют наш начальный ввод «Они детерминированы» в двоичном виде. Следующие 272 бита — это единица, за которой следует 271 ноль. Последние 64 бита — это длина нашего начального ввода (176 бит), записанного в двоичном виде. Ему предшествуют нули, чтобы заполнить остальные 64 бита. Три компонента дополненного ввода были разбиты на полужирный и обычный текст, чтобы было легче увидеть, где каждый из них начинается и заканчивается.
Вводы размером более 512 битЕсли исходный ввод превышает 448 бит, он разбивается на несколько 512-битных блоков. Каждый блок включает 512 бит входных данных, пока весь ввод не будет разбит на блоки. Последний блок должен включать как минимум 1 бит заполнения плюс 64-битную длину в двоичном формате.
В случае, когда оставшиеся входные данные имеют длину ровно 448 бит, потребуется добавить целый дополнительный блок для заполнения . Предпоследний блок будет включать в себя последние 448 бит данных, затем единицу, за которой следуют 63 нуля, чтобы заполнить блок. Последний блок будет включать 448 нулей (всего 512 бит заполнения), за которыми следует 64-битная длина сообщения в двоичном формате.
Если бы вместо этого осталось 449 битов входных данных, дополнительный блок все равно пришлось бы добавить. Предпоследний блок будет включать 449 бит оставшихся входных данных, за которыми следуют единица и 62 нуля, чтобы заполнить блок. Последний блок будет содержать 448 нулей, за которыми следует 64-битная длина сообщения.
Напротив, если бы оставшиеся данные имели длину всего 447 бит, последний блок включал бы последние 447 бит входных данных, за которыми следовала бы одна единица в качестве заполнения без нулей. 64-битная длина сообщения будет добавлена в конце, чтобы довести общую длину до 512 бит.
Разница между этими двумя случаями может показаться странной, но она позволяет дополнить ввод хотя бы одной цифрой, оставляя место для 64-битной длины сообщения.
Основной алгоритм MD5Вот основной алгоритм MD5 во всей красе:
Не понимаю, что происходит? Это нормально. Это сложный алгоритм, поэтому нет никакого способа нарисовать его, не запутавшись.
Вход МВверху у нас есть ввод, который говорит 512-битный блок сообщений, M . На этом этапе диаграммы она уже включает все отступы, которые мы добавили на последнем шаге. Если вы проследите за стрелкой вниз, вы увидите, что она входит в каждый из четырех прямоугольников «16 операций…». Каждый из этих четырех прямоугольников называется раундами , и каждый из них состоит из серии из шестнадцати операций
Это означает, что наш ввод, М, является вводом на каждом из этих четырех этапов . Однако, прежде чем его можно будет использовать в качестве входных данных, наш 512-битный M должен быть разбит на шестнадцать 32-битных «слов». Каждому из этих слов присваивается собственный номер в диапазоне от M0 до M15. В нашем примере это 16 слов:
- M 0 – 01010100 01101000 01100101 01111001
- М 1 – 00100000 01100001 01110010 01100101
- М 2 – 00100000 01100100 01100101 01110100
- М 3 – 01100101 01110010 01101101 01101001
- М 4 – 01101110 01101001 01110011 01110100
- М 5 – 01101001 01100011 10000000 00000000
- М 6 – 00000000 00000000 00000000 00000000
- М 7 – 00000000 00000000 00000000 00000000
- М 8 – 00000000 00000000 00000000 00000000
- М 9 – 00000000 00000000 00000000 00000000
- М 10 – 00000000 00000000 00000000 00000000
- М 11 – 00000000 00000000 00000000 00000000
- М 12 – 00000000 00000000 00000000 00000000
- М 13 – 00000000 00000000 00000000 00000000
- М 14 – 00000000 00000000 00000000 00000000
- М 15 – 00000000 00000000 00000000 10110000
В оставшейся части статьи мы в основном будем использовать шестнадцатеричный формат. Если вы не понимаете, что такое шестнадцатеричный формат, обратитесь к этому разделу нашей предыдущей статьи о MD5. Используя онлайн-конвертер, шестнадцатеричные эквиваленты наших двоичных чисел:
- М 0 – 54686579
- М 1 – 20617265
- М 2 – 20646574
- М 3 – 65726D69
- М 4 – 6E697374
- М 5 – 69638000
- М 6 – 00000000
- М 7 – 00000000
- М 8 – 00000000
- М 9 – 00000000
- М 10 – 00000000
- М 11 – 00000000
- М 12 – 00000000
- М 13 – 00000000
- М 14 – 00000000
- М 15 – 000000B0
Каждое из этих шестнадцати значений выступает в качестве входных данных для сложного набора операций, которые представлены каждым прямоугольником «16 операций…». Еще раз, эти четыре прямоугольника «16 операций…» представляют четыре разных раунда, причем один наверху представляет первый раунд, а самый нижний — четвертый раунд . Хотя каждый из этих M входов используется в каждом отдельном раунде, они добавляются в разном порядке.
В первом раунде M входов добавляются в алгоритм последовательно, т.е. М0, М1, М2… М15.
Во втором раунде M входов добавляются в следующем порядке:
M1, M6, M11, M0, M5, M10, M15, M4, M9, M14, M3, M8, M13, M2, M7, M12
В третьем раунде M входов добавляются в следующей последовательности:
M5, M8, M11, M14, M1, M4, M7, M10, M13, M0, M3, M6, M9, M12, M15, M2
В четвертом раунде M входов добавляются в следующем порядке:
M0, M7, M14, M5, M12, M3, M10, M1, M8, M15, M6, M13, M4 , M11, M2, M9
В случаях, когда начальный ввод и его заполнение больше, чем один 512-битный блок, схема нумерации сбрасывается. Как только первый блок данных обработан, входы второго блока также помечаются от M0 до M15
. Для простоты наш пример будет привязан к одному 512-битному блоку данных, содержащему 16 слов.
Векторы инициализации алгоритма MD5Теперь, когда мы немного объяснили наши входные данные M, пришло время обратить наше внимание на векторы инициализации , которые показаны сразу под 512-битным блоком сообщений, M на диаграмме.
В начале векторы инициализации представляют собой четыре отдельных числа, указанных в RFC, описывающем стандарт MD5. Это:
- А – 01234567
- Б – 89abcdef
- C — федкба98
- Д – 76543210
По мере прохождения алгоритма эти числа будут заменены различными выходными данными, которые мы получаем в результате вычислений. Однако эти четыре вектора инициализации важны для начала работы. Все четыре из них являются входными данными первого прямоугольника «16 операций…».
Функции MD5 F, G, H и IПервым шагом в прямоугольнике «16 операций…» является функция:
F(B, C, D) = (B∧C)∨(¬B∧D)
Выглядит запутанно? Мы объясним это подробно позже. Важно отметить, что векторы инициализации B, C и D используются в этой функции в качестве входных данных.
На последних этапах алгоритма их роль будут выполнять значения, заменяющие векторы инициализации B, C и D.
Функция F(B, C, D) используется для 16 операций первого раунда. В последующих раундах его место занимают следующие функции:
Раунд 2: G(B, C, D) = (B∧D)∨(C∧¬D)
Раунд 3: H(B, C, D) =B⊕C⊕D
Раунд 4: I (B, C, D) = C⊕(B∨¬D)
Не волнуйтесь, мы объясним и это.
ОперацииЭта диаграмма дает приблизительный обзор того, что происходит внутри каждого прямоугольника «16 операций…»: стрелки от B, C и D указывают на прямоугольник с надписью F. Это представляет функцию F(B, C, D) — обратите внимание, что в остальных трех раундах функция F заменяется функциями G, H и I соответственно.
Если вы проследите за стрелкой из него в следующее поле, это означает, что вывод F(B, C, D) добавляется к вектору инициализации A с особым типом добавления. В первой операции значение вектора инициализации A равно 01234567, но оно изменяется в последующих операциях.
Результат перемещается в следующее поле, где он добавляется к части ввода, представленной Mi. После этого к результату добавляется константа K с использованием того же специального типа сложения. Значения для K выводятся из формулы:
abs(sin(i+ 1))×2 32
Эта формула не слишком важна для понимания остальной части MD5. Однако нам нужны значения, к которым он ведет, а именно:
- K1 — D76AA478 .
- К2 – E8C7B756
- К3 – 242070ДБ
- К4 – C1BDCEEE
- К5 – F57COFA
- К6 – 4787C62A
- К7 — А8304613
- К8 – ФД469501
- К9 – 698098D8
- К10 – 8B44F7AF
- К11 – FFFF5BB1
- К12 — 895CD7BE
- К13 – 6B2
- К14 – FD987193
- К15 — А679438Е
- К16 – 49B40821
- К17 – F61E2562
- К18 – C040B340
- К19 – 265E5A51
- К20 – E9B6C7AA
- К21 – Д62Ф105Д
- К22 – 02441453
- К23 – D8A1E681
- К24 – E7D3FBC8
- К25 – 21E1CDE6
- К26 – C33707D6
- К27 – Ф4Д50Д87
- К28 – 455А14ЭД
- К29– А9Е3Е905
- К30 – FCEFA3F8
- К31 – 676F02D9
- К32 – 8D2A4C8A
- К33 – FFFA3942
- К34 – 8771F681
- К35 – 699D6122
- К36 – ФДЭ5380К
- К37– А4ВЕЕА44
- К38 – 4BDECFA9
- К39 – F6BB4B60
- К40 – BEBFBC70
- К41 – 289B7EC6
- К42 – ЕАА127ФА
- К43 – D4EF3085
- К44 – 04881D05
- К45 – Д9Д4Д039
- К46 – E6DB99Е5
- К47 – 1FA27CF8
- К48 – C4AC5665
- К49 – Ф42
- К50 – 432AFF97
- К51 – AB9423A7
- К52 – FC93A039
- К53 – 655B59C3
- К54 – 8F0CCC92
- К55 – ФФЭФФ47Д
- К56 – 85845DD1
- К57 – 6FA87E4F
- К58 — FE2CE6E0
- К59 – А3014314
- К60 – 4E0811A1
- К61 – F7537E82
- К62 – BD3AF235
- К63 – 2АД7Д2ББ
- К64 — EB86D391
Одно из этих значений K используется в каждой из 64 операций для 512-битного блока. K1-K16 используются в первом раунде, K17-K32 используются во втором раунде, K33-K48 используются в третьем раунде, а K49-K64 используются в четвертом раунде.
После добавления значения K следующим шагом является сдвиг количества битов влево на заданную величину Si. Как это работает, мы объясним далее в статье. Величина, на которую сдвигается каждый бит, зависит от того, какую операцию выполняет алгоритм MD5. Каждая операция имеет предустановленное количество смен, и операции используют их в последовательном порядке (например, S1, S2, S3 и т. д.). Значения S:
- Раунд первый
- С1, С5, С9, С13 – 7
- С2, С6, С10, С14 – 12
- С3, С7, С11, С15 – 17
- С4, С8, С12, С16, – 22
- Второй раунд
- S17, S21, S25, S29 – 5
- С18, С22, С26, С30 – 9
- С19, С23, С27, С31 – 14
- С20, С24, С28, С32 – 20
- Третий раунд
- S33, S37, S41, S45 – 4
- С34, С38, С42, С46 – 11
- С35, С39, С43, С47 – 16
- С36, С40, С44, С48 – 13
- Четвертый раунд
- S49, S53, S57, S61 – 6
- S50, S54, S58, S62 – 10
- С51, С55, С59, С63 – 15
- С52, С56, С60, С64 – 21
После выполнения сдвига результат всех этих вычислений прибавляется к значению вектора инициализации B. Изначально это 89abcdef, но в последующих операциях оно меняется.
Выход этого значения становится вектором инициализации для B в следующей операции. Векторы инициализации B, C и D перемешиваются на один пробел вправо, так что B становится C, C становится D, а D становится A в следующей операции.
Четыре раунда по 16 операцийЭтот процесс зацикливается на 16 операций. Каждый раз предусмотренные выше входы используются для соответствующей операции. 17-я операция является началом второго раунда, и процесс продолжается аналогично, за исключением того, что вместо нее используется функция G.
Все снова меняется к 33-й операции, когда функция H используется в течение третьего раунда. Четвертый раунд начинается с 49-й операции, вместо нее используется функция I.
По завершении четвертого раунда и его 64-й операции выходы добавляются к исходным векторам инициализации, которые мы перечислили выше. Результатом этого вычисления является окончательный хэш MD5 нашего ввода.
Запутались?
Все в порядке, мы начали с грубого и упрощенного обзора, который предназначен только для того, чтобы дать вам представление о многих шагах, связанных с MD5. В следующем разделе мы рассмотрим каждую часть процесса более подробно
Подробный алгоритм MD5Давайте начнем с изучения F-функции.
Функция FФункция F является побитовой операцией (как и функции G, H и I). Это в основном быстрые и простые способы для компьютеров выполнять арифметические действия с двоичным кодом. В то время как компьютеры выполняют свою работу в двоичном формате, мы в основном будем придерживаться шестнадцатеричного, потому что его легче читать. Обратитесь к разделу о шестнадцатеричном формате в другой нашей статье о MD5, если вам нужно более глубокое понимание того, что это такое.
Функция F:
F(B, C, D) = (B∧C)∨(¬B∧D)
Если вы никогда раньше не изучали булеву алгебру, эти символы могут вас немного сбить с толку. Полное обсуждение булевой алгебры уведет нас слишком далеко в сторону, но, по сути, это особый вид алгебры, который активно используется в вычислениях.
Вам необходимо знать следующие символы:
- ∧– И
- ∨– ИЛИ
- ¬ — НЕ
- ⊕ — XOR, что в основном означает одно, но не оба.
Теперь мы можем подставить числа для наших векторов инициализации, которые мы обсуждали в разделе Векторы инициализации :
F (89abcdef, fedcba98, 76543210) = (89abcdef AND fedcba98) ИЛИ (NOT-89abcdef AND 76543203)
Мы можем выполнить этот расчет с помощью онлайн-булевого калькулятора. Однако нам нужно будет разделить его на отдельные шаги, потому что этот калькулятор не позволяет нам использовать круглые скобки для правильного упорядочения уравнения.
Если вы хотите попробовать сами:
- Введите 89abcdef на вход A.
- Выберите И в раскрывающемся меню под ним.
- Введите fedcba98 на вход B.
- Выберите Hex из четырех различных систем счисления. Он расположен прямо под Результатом операции.
Ответ появляется рядом с Результатом операции:
88888888
Теперь давайте решим вторую часть уравнения:
- Выберите НЕ слева от входа A.
- Введите 89abcdef на вход A.
- Выберите И в раскрывающемся меню под ним.
- Введите 76543210 на вход B.
- Выберите Hex из четырех различных систем счисления, расположенных прямо под Operation Result.
Наш ответ:
76543210
Мы решили часть уравнения, так что теперь мы знаем, что:
F(B, C, D) = 88888888 ИЛИ 76543210
Мы можем закончить это следующим образом:
- Введя 88888888 на вход A (убедитесь, что поле НЕ больше не выбрано).
- Выбор ИЛИ из выпадающего меню под ним.
- Ввод 76543210 на вход B.
- Выбор Hex из четырех различных систем счисления, расположенных прямо под Результатом операции.
Если вы все сделали правильно, результат F(B, C, D) должен быть:
fedcba98
Булева алгебра работает иначе, чем нормальная алгебра. Если вас смущает весь процесс, вам, возможно, придется провести некоторое базовое исследование на странице булевой алгебры, на которую мы ссылались выше. В противном случае вам просто придется довериться нам.
Пока что мы завершили только первый расчет. Взгляните на диаграмму, чтобы понять, к чему мы движемся:
Все, что мы сделали, — это прогнали значения B, C и D через функцию F. На этой диаграмме еще многое предстоит сделать. На этой диаграмме представлена только одна операция , а в раунде их шестнадцать. Есть четыре раунда для каждого 512-битного блока, что дает нам всего 64 операции . Если имеется более одного 512-битного блока входных данных, каждый блок должен пройти эти 64 операции. Нам предстоит многое пройти, так что давайте двигаться вперед.
Модульное дополнениеЕсли вы посмотрите на стрелку, выходящую из коробки F, вы увидите, что она указывает на другой квадрат, который выглядит как окно. В это поле также входит стрелка от буквы А. Символ коробки представляет модульное дополнение .
Мы представили модульные операции в другой нашей статье о MD5. Вы можете вернуться к этому разделу, если вам нужно быстрое напоминание. Однако может быть полезнее обратиться к следующей статье о модульной арифметике, потому что модульное сложение немного отличается от модульных операций, о которых мы говорили ранее.
Формула для этого шага алгоритма:
(X + Y) mod Z
Где:
X – 01234567 (вектор инициализации A, предопределенное значение, которое мы обсуждали в Раздел векторов инициализации алгоритма MD5 )
Y – fedcba98 (результат функции F из предыдущего шага)
Z – 100000000 (это эквивалентно 2 32 (что гарантирует, что результат этого уравнения не более восьми символов)
Когда мы подставим все в нашу формулу, мы получим:
(01234567 + fedcba98) mod 100000000
Мы будем использовать этот онлайн-калькулятор для выполнения операции по модулю. Сначала выберите шестнадцатеричный для «Число типа », «Число b типа », «Число c типа » и «Преобразовать результат вычисления в а». Опять же, нам придется разделить операцию на части, потому что этот калькулятор также не позволяет использовать скобки.
Введите:
01234567 в «Число значение ».
fedcba98 в «Число b значение ».
Введите « add(a,b) » в поле, где написано «Уравнение расчета». Это просто говорит калькулятору сложить числа, которые мы ввели для A и B. Это дает нам результат:
ffffffff
Для следующего шага введите:
ffffffff в «Число значение ».
100000000 в «Число b значение».
mod(a,b) в «Расчетное уравнение».
Если вы все сделали правильно, при нажатии Вычислить вы должны получить следующий ответ:
ffffffff
Если вы все еще не понимаете, как работают эти расчеты, возможно, стоит проверить модульная арифметическая ссылка, размещенная выше. Другой вариант — преобразовать шестнадцатеричные числа в десятичные числа. Преобразование чисел в десятичные числа и выполнение вычислений в более знакомой вам системе счисления может помочь вам понять, что на самом деле происходит. Затем вы можете преобразовать свой ответ обратно в шестнадцатеричный, чтобы увидеть, совпадает ли он.
Первый p ortion нашего ввода сообщенияТеперь, когда у нас есть вывод из этого первого модульного поля добавления, пора двигаться дальше. Если вы проследите линию, выходящую из коробки, вы увидите, что она указывает на другую такую же модульную дополнительную коробку. Слева от этого поля мы видим стрелку, на которую также указывает Ми. Они представляют наши два входа в следующем расчете.
Если вы помните, что мы обсуждали в начале Раздел ввода M , каждый блок ввода 512 разделен на шестнадцать 32-битных «слов», помеченных M0-M15. и на диаграмме — это общий заполнитель для любого слова, до которого работает алгоритм. В данном случае мы только начинаем, поэтому имеем дело с первым словом M0.
Когда мы разбили наш ввод на шестнадцать 32-битных слов в . Секция ввода M , M0 была 54686579 в шестнадцатеричном формате.
В дополнение к нашему входу M0 нам также нужен наш вывод из последнего шага, ffffffff . Прямоугольник указывает, что нам нужно выполнить модульное сложение с обоими этими числами, как и в предыдущем разделе.
Формула для этого шага алгоритма также имеет вид:
(X + Y) mod Z
Где:
X – 54686579 (M0)
Y – ffffffff (вывод из предыдущего раздела )
Z – 100000000 (это 2 32 )
Следовательно:
( 54686579 + ffffffff) mod 100000000
Воспользуемся тем же онлайн-калькулятором. На этот раз это то же уравнение, но с другими входными данными, поэтому мы пройдем его намного быстрее. Если вы заблудились, просто обратитесь к предыдущему разделу и замените значения этими новыми входными данными.
Введите:
54686579 в «Число значение ».
ffffffff в «Число b значение».
добавить(а,б) в «Расчетное уравнение».
Нажмите кнопку Вычислить . Это даст вам ответ:
154686578
Скопируйте это значение и вставьте его в поле «Число значение ». Вставьте 100000000 в «Число b значение ». Измените формулу на mod (a,b) . Если вы все сделали правильно, когда вы нажмете «Рассчитать», вы должны получить ответ:
54686578
Имея этот вывод, пришло время перейти к следующему шагу.
Добавление константыВозвращаясь к нашей диаграмме, когда мы проследим за линией из предыдущего блока, мы увидим еще один из блоков, указывающих на модульное добавление. На этот раз нам нужно, чтобы в качестве входных данных выступал наш результат последней операции, а также то, что на диаграмме обозначено как Ki.
K относится к константе, которых существует 64 различных, по одной для каждой операции, задействованной в обработке 512-битного блока. я — это просто заполнитель для любой константы, которую мы используем. Поскольку это все еще первая операция, мы сначала будем использовать K1 (в RFC не указано, почему ввод сообщения M начинается с M0, а константа начинается с 1). Каждое из значений K показано в разделе Операции . Если вы вернетесь назад, вы увидите, что K1 это:
d76aa478
Еще раз, наша функция:
(X + Y) mod Z
Наши значения:
X – d76aa470305
Y – 54686578 (the output from the previous operation)
Z – 100000000 (2 32 )
When we plug everything in, we get:
(d76aa478 + 54686578) mod 100000000
С помощью того же онлайн-калькулятора вводим следующие входные данные:
d76aa478 в «Число значение ».
54686578 в «Число b значение».
добавить (a,b) в «Расчетное уравнение».
Нажмите кнопку Вычислить . Это даст вам ответ:
12bd309f0
Скопируйте это значение и вставьте его в поле «Число значение ». Вставьте 100000000 в «Число b значение ». Измените формулу на mod (a, b). Если вы все сделали правильно, когда вы нажмете «Рассчитать», вы должны получить ответ:
2bd309f0
Вышеприведенный результат — это наш результат для этого шага операции.
Влево бит- сдвигКогда мы еще раз проследим за стрелками, мы увидим прямоугольник с несколькими символами, указывающими влево. Это означает, что нам нужно взять ввод из предыдущей операции и сдвинуть его влево. Количество пробелов, которые мы сдвигаем, зависит от раунда в соответствии с предопределенными значениями, которые мы перечислили в разделе Операции .
Так как мы впервые проходим эту функцию, мы начинаем с S1. Если вы обратитесь к листингу, то увидите, что значение для S1 равно 7. Это означает, что нам нужно сдвинуть наше значение на семь делений влево. Как и все, что делают компьютеры, это происходит на двоичном уровне, и нам будет легче увидеть, что происходит, если мы временно преобразуем наше шестнадцатеричное число обратно в двоичное.
Таким образом, давайте сделаем вывод с нашего предыдущего шага:
2BD309F0
и используйте онлайн -преобразователь, чтобы переключить его на двоичный:
0010 1011 1101 0011 0000 1001 1111 0000
Все, что нам нужно сделать, это нужно для перемещения каждые каждый. бит 7 пробелов влево. Мы сделаем это с промежуточным шагом, чтобы было легче увидеть, что происходит:
001 0101 1110 1001 1000 0100 1111 1000 0xxx xxxx
Мы добавили семь символов x справа, чтобы представить сдвиг . Однако этот пробел на самом деле заменяется семью крайними левыми числами, которые мы подчеркнули. Семибитное вращение действительно выглядит так:
1110 1001 1000 0100 1111 1000 0001 0101
Если мы преобразуем это число обратно в шестнадцатеричное, мы получим:
e984f815 это похоже на левый сдвиг, хотя это похоже на левый сдвиг,
заставляет строку выглядеть для нас радикально иначе.
Более модульное сложениеОглядываясь назад на диаграмму еще раз, когда мы прослеживаем линии вперед, мы видим, что результат нашего сдвига влево переходит в другое модульное сложение. Другой вход восходит к B вверху, то есть к 9.0304 вектор инициализации B . Если вы вернетесь к разделу Векторы инициализации алгоритма MD5 , вы увидите, что это значение равно 89abcdef .
К настоящему времени вы должны быть хорошо знакомы с добавлением модулей и шагами, которые мы предприняли для решения этой проблемы. Формула:
(X + Y) mod Z
На этот раз:
X – 89abcdef (вектор инициализации B)
Y – e984f815 (вывод из предыдущего раздела)
z — 10000000000 (2 32 )
Когда мы вкладываем все цифры, мы получаем:
(89ABCDEF + E984F895) MOD 100000000
LET в «Число значение ».
e984f815 в «Число b значение».
добавить (a,b) в «Расчетное уравнение».
Нажмите кнопку Вычислить , чтобы получить ответ:
17330C604
Теперь пришло время скопировать и вставить это значение в поле «Число значение ». Введите 100000000 в «Число b значение» и измените формулу на mod (a,b) . Это должно дать вам ответ:
7330C604
Конец… первой операцииМы в основном закончили первую операцию. Если вы проследите стрелку, выходящую из последнего поля добавления модуля, над которым мы работали, она укажет на букву B внизу. Эти значения внизу для A, B, C и D будут действовать как векторы инициализации для второй операции.
Это означает, что результат последнего шага станет вектором инициализации B для следующей операции. Он заменяет исходный вектор инициализации B, который был 89abcdef. Если вы будете следовать всем остальным строкам, мы получим:
- D в качестве нового вектора инициализации для A.
- Вывод всей операции в виде вектора инициализации для B.
- B в качестве нового вектора инициализации для C.
- C в качестве нового вектора инициализации для D.
Осталось всего 63 операции…
Краткое изложение первой операцииПрежде чем мы двинемся дальше, лучше всего дать краткий обзор многих сложных шагов, через которые мы прошли.
Мы начали с наших четырех векторов инициализации:
- A — 01234567
- Б – 89abcdef
- C — федкба98
- Д – 76543210
Поместим эти последние три значения через функцию F:
F(B, C, D) = (B∧C)∨(¬B∧D)
Это дало нам результат:
F(B, C, D) = fedcba98
Мы взяли этот результат и поместили его в следующую формулу для модульного сложения вместе с вектором инициализации A:
(X+ Y) mod z
Где:
x = 01234567
y = fedcba98
z = 100000000
Это дало нам ответ:
Fffffff
Следующее, мы сделали еще немного модуля. с первым словом нашего начального ввода, M0, что составляет 54686579. Мы добавили его к результату предыдущего шага по той же формуле, которая дала нам:
54686578
Следующим шагом было еще одно модульное сложение, на этот раз с константой K, которую мы перечислили. значения в разделе Операции . K1 был d76aa478, который мы добавили к предыдущему результату, что дало нам выход:
2bd309f0
На следующем шаге все смешалось, и мы преобразовали шестнадцатеричный результат в двоичный, чтобы мы могли легко увидеть семибитный Сдвиг влево. Когда мы изменили его обратно на шестнадцатеричный, результат был:
e984f815
Затем мы вернулись к модульному сложению, добавив этот результат к вектору инициализации B, 89abcdef . Мы получили следующее значение, которое становится вектором инициализации B в следующем раунде:
7330c604
Значения для B, C и D также были перетасованы вправо, что дало нам новые векторы инициализации для следующая операция:
- А – 76543210
- Б – 7330c684
- С – 89abcdef
- Д — федцба98
Вторая операция проходит по тем же шаблонам, что и предыдущая операция, но выполняется с другими значениями. Отличаются не только векторы инициализации, но и некоторые входные данные. Операция выполняется в следующем порядке:
- Новые значения B, C и D проходят через F-функцию так же, как и в предыдущей операции.
- Затем результат добавляется к новому значению A посредством модульного сложения.
- На этот раз второе слово из входного сообщения, M1, добавляется к результату предыдущего шага с модульным сложением. Согласно разделу Вход M , M1 54686579.
- Модульная арифметика используется еще раз, на этот раз к константе добавляется последний результат, т.е. K2. K2 равен e8c7b756 согласно нашему списку значений K в разделе Операции .
- Затем мы берем результат из последнего раздела и сдвигаем его влево. Однако вместо того, чтобы переместить его на семь делений, на этот раз мы сдвинем его на двенадцать. Это связано с тем, что значения, которые мы установили для левых битовых сдвигов в разделе . Операции , предусматривают, что S2 равно 12. Это сигнализирует о том, что 12 перемещается влево во второй операции.
- Затем этот результат добавляется к новому значению вектора инициализации B с помощью модульной арифметики.
- Результат становится новым вектором инициализации B для третьей операции. Значения для B, C и D также поворачиваются вправо, так что B становится вектором инициализации C, C становится вектором инициализации D, а D становится вектором инициализации A.
Теперь вы, надеюсь, поняли, что происходит в каждой отдельной операции. Операции с третьей по шестнадцатую начинаются с результатов предыдущих операций в качестве «векторов инициализации». Однако эти результаты всегда были сдвинуты на одну букву вправо.
Последующие операции включают:
- Значения для B, C и D, проходящие через F-функцию.
- Результаты добавляются к соответствующим значениям A посредством модульного сложения.
- Результаты добавляются к соответствующей части входного сообщения Mi.
- Результаты добавляются к соответствующей константе Ki.
- Результаты сдвигаются влево на заданное количество пробелов в соответствии с Si.
- Результаты добавляются к вектору инициализации B, и это значение становится новым вектором инициализации B в следующем раунде.
- Остальные три значения сдвигаются на одну позицию вправо.
Окончательные значения из третьей операции становятся векторами инициализации для четвертой операции, а окончательные значения из четвертой операции становятся векторами инициализации для пятой операции. Этот шаблон продолжается до 16-й операции, которая использует результаты 15-го раунда в качестве векторов инициализации. Результаты операции 16 станут «векторами инициализации» для первой операции второго раунда.
Второй раундДавайте на минутку уменьшим масштаб и посмотрим на общую структуру алгоритма. Мы прошли первую партию из 16 операций, теперь переходим ко второму туру. Диаграмма на самом деле не отражает алгоритм правильно и включает все, но если бы это было так, то это было бы слишком беспорядочно:
Прямо сейчас у нас есть выходы из первого раунда, которые станут нашими векторами инициализации для первой операции второй раунд во втором длинном прямоугольнике.
Ситуация меняется в начале второго раунда. Его первая операция, 17-я в целом, начинается с другой функции. Функция F заменяется функцией G, которая будет использоваться для операций с 17 по 32. Функция G выглядит следующим образом:
G (B, C, D) = (B∧D)∨(C∧¬D)
Значения для B, C и D равны выходным данным предыдущей операции, как и раньше. Для освежения знаний по булевой алгебре:
- ∧– И
- ∨– ИЛИ
- ¬ — НЕ
Таким образом, формула в основном говорит, что G (B, C, D) равно (B AND D) ИЛИ (C AND NOT D).
Вычисление правильных значений для каждой из предыдущих 16 операций звучит не очень весело, поэтому вместо этого мы просто придумаем кое-что. Это по-прежнему даст вам представление о том, как работает эта новая функция G, и избавит вас от прокручивания страниц повторения. Допустим, 16-я операция привела к следующим векторам инициализации для 17-го раунда:
- А – 799d1352
- Б – 2c34dfa2
- С – de1673be
- Д – 4b976282
Следовательно:
G (B, C, D) = (2c34dfa2∧4b976282)∨(de1673be∧¬4b976282)
Нам нужно будет выполнить расчет по шагам, потому что этот онлайн-калькулятор логических выражений не позволяет скобки для порядка операций. Начнем с нахождения результата первой части:
(2c34dfa2∧4b976282)
- Введите 2c34dfa2 на вход A.
- Выберите И в раскрывающемся меню под ним.
- Введите 4b976282 на вход B.
- Выберите Hex из четырех различных систем счисления, расположенных прямо под Operation Result.
Это дает нам результат:
8144282
Теперь займемся второй частью уравнения:
(de1673be∧¬4b976282)
- Отмените старое значение для входа A и поместите вместо него de1673be .
- Вы можете оставить то же значение 4b976282 на входе B, просто нажмите кнопку NOT слева от него.
В результате вы должны получить следующее:
1400113c
Теперь, когда у нас есть результаты как (B∧D), так и (C∧¬D), мы можем выполнить операцию ИЛИ.
8144282 ∨ 1400113c
Нам нужно:
- Введите 8144282 на вход A.
- Выберите ИЛИ в раскрывающемся меню под ним.
- Введите 1400113c на вход B. Убедитесь, что НЕ выбрано больше.
- Выберите Hex из четырех различных систем счисления, расположенных прямо под Operation Result.
Это дает нам результат для G (B, C, D):
1c1453be
Затем это значение отправляется в модульную функцию сложения вместе с вектором инициализации, который мы составили для A. Все остальное происходит довольно хорошо. во многом так же, как и во время операций, которые мы описали выше, когда выходные данные предыдущей операции становятся входными данными для следующего раунда. Каждая операция использует соответствующие входы Mi и Ki, а также сдвиги Si, которые мы указали в Раздел операций .
Третий раундПосле завершения 32-й операции ее выходы используются в качестве векторов инициализации для 33-й операции. Однако, поскольку это начало третьего раунда, функция H используется с этого момента и до конца 48-й операции. Формула:
H (B, C, D) = B⊕C⊕D
Функция H также является функцией (B, C и D). Символ ⊕ в правой части уравнения может быть вам незнаком. Это обычно известно как XOR операция, сокращение от эксклюзивный или . На практике его вывод истинен (в логическом смысле), если истинен один из его входных аргументов, но не в том случае, если истинны оба.
Давайте составим некоторые выходные данные 32-го раунда, чтобы они служили векторами инициализации для этой функции в 33-м раунде:
- A – eb160cd0
- Б – д5071367
- С – c058ade2
- Д – 63c603d7
Это дает нам:
H(B, C, D) = d5071367 ⊕ c058ade2 ⊕ 63c603d7
Давайте вернемся к нашему онлайн-калькулятору и введем это уравнение:
- Введя d5071367 в поле ввода A.
- Выбор XOR в раскрывающемся меню под ним.
- Ввод c058ade2 на вход B.
- Выбор XOR в раскрывающемся меню под ним.
- Ввод 63c603d7 на вход C.
- Выбор Hex из четырех различных систем счисления, расположенных прямо под Результатом операции.
Это дает нам результат для функции H (B, C, D):
7699bd52
Все остальное продолжается, как указано выше, за исключением соответствующих входных значений для каждой операции.
Четвертый раундКогда мы дойдем до 49-й операции, наступит время начала четвертого раунда. Получаем новую формулу, которую будем использовать до конца 64-го раунда:
I(B, C, D) = C⊕(B∨¬D)
Эта формула также имеет функцию XOR для одного или другой, но не оба. По сути, это говорит «С ИЛИ, НО НЕ ОБОИХ (В ИЛИ НЕ-D). Составим еще несколько выходов с конца 48-го тура:
- А – 60cdceb1
- Б – 7д502063
- С – 8b3d715d
- Д – 1de3a739
Следовательно:
I(B, C, D) = 8b3d715d⊕(7d502063∨¬1de3a739)
Сначала проделаем операцию в скобках на нашем онлайн-калькуляторе. Введите его:
- Поместите 7d502063 на вход A.
- Выбор ИЛИ из выпадающего меню под ним.
- Ввод 1de3a739 на вход B.
- Выбор нажатия НЕ рядом с входом B.
- Выбор Hex из четырех различных систем счисления, расположенных прямо под Результатом операции.
Это дает нам результат:
7f5c78e7
Таким образом, оставшаяся часть уравнения:
8b3d715d ⊕ 7f5c78e7
Поместите 9
- Выберите XOR из раскрывающегося меню под ним.
- Введите результат нашего последнего вычисления, 7f5c78Ee7 , в поле ввода B (убедитесь, что НЕ рядом с ним больше не выбрано).
- Выберите Hex из четырех различных систем счисления, расположенных прямо под Operation Result.
80304 8b3d715d
на вход А.Это дает нам результат:
f46109ba
Остальная часть этой операции продолжается так же, как и все предыдущие операции. Этот результат добавляется к вектору инициализации A с помощью модульной арифметики, и за каждым из других шагов следуют соответствующие входные значения для этого раунда. В конечном итоге это дает нам выходные данные, которые используются в качестве векторов инициализации для операции 50, в которой также используется функция I.
Этот процесс продолжается до (включительно) 64-го раунда.
Последний шаг алгоритма MD5 после 64 операций64-я операция выполняется так же, как и все предыдущие, используя выходные данные 63-й операции в качестве векторов инициализации для функции I. Когда он прошел через каждый из шагов операции, он дает нам новые значения для A, B, C и D.
Предположим, что эти значения таковы:
- A – 60cdceb1
- Б – 7д502063
- С – 8b3d715d
- Д – 1de3a739
Во-первых, мы снова уменьшим масштаб и посмотрим на более крупный алгоритм MD5:
К этому моменту мы закончили нижний прямоугольник с надписью «16 операций…». Если вы проследите за стрелками вниз, то увидите, что они соединены с блоком с четырьмя вычислениями модульного сложения . Другие входные данные поступают из векторов инициализации, которые мы использовали в самом начале алгоритма MD5.
На этом этапе давайте будем называть их OIV-A, OIV-B и т. д. для исходного вектора инициализации A, B и т. д. Это должно помочь сохранить ясность. Этими исходными векторами инициализации были:
- OIV-A – 01234567
- OIV-B – 89abcdef
- OIV-C – fedcba98
- ОИВ-Д – 76543210
И снова наше уравнение для модульного сложения:
(X + Y) mod Z
В данном случае:
- X – 60cdceb1 (Вывод для вектора инициализации A после 64-й операции).
- Y – 01234567 (ОИВ-А).
- Z — 100000000 (это 232).
Следовательно:
(60cdceb1 + 01234567) mod 100000000
Вернемся к нашему онлайн-калькулятору модульного сложения. Опять же, нам придется делать это уравнение поэтапно, потому что калькулятор не позволяет использовать скобки. Добавим первые два числа, введя:
- 60cdceb1 в «Число значение ».
- 01234567 в «Число b значение».
Введите « add(a,b) » в «Уравнение расчета». Убедитесь, что у вас выбрано Шестнадцатеричное для «Число типа », «Число b типа » и «Преобразовать результат вычисления в а».
Нажмите кнопку Вычислить , чтобы получить ответ:
61f11418
Теперь пришло время скопировать и вставить это значение в поле «Число значение ». Введите 100000000 в «Число b значение» и измените формулу на «mod (a,b)». Это должно дать вам ответ:
61f11418
Это ответ для окончательного значения A (в случае одного 512-битного блока входных данных).
Последние три вычисления алгоритма MD5Нам нужно сделать точно такое же уравнение для наших оставшихся чисел:
(А+В) мод С
Следовательно, надо решить:
- (Б+ОИВ-В) мод С
- (С + ОИВ-С) мод С
- (Д + ОИВ-Д) мод. С
Подставив соответствующие числа, получим:
- (7d502063 + 89abcdef) mod 100000000
- (8b3d715d + fedcba98) мод 100000000
- (1de3a739 + 76543210) мод 100000000
К настоящему моменту вы должны быть хорошо знакомы с тем, как работает каждое из этих уравнений, поэтому при желании вы сможете вычислить их самостоятельно. Если вы хотите пропустить тяжелую работу, ответы таковы:
- B – 06fbee52 (калькулятор на самом деле даст вам ответ 6fbee52. Мы просто добавили ноль впереди, чтобы довести его длину до восьми символов)
- С – 8a1a2bf5
- Д – 9437d949
Поскольку мы вычисляем хеш только для одного 512-битного блока данных, у нас есть вся информация, необходимая для окончательного хэша. Это просто конкатенация (это просто красивое слово, которое означает, что мы складываем числа вместе) этих последних значений для A, B, C и D:
Хэш = ABCD
Следовательно, хэш нашего первоначального послания «они детерминированы»:
H (они детерминированы) = 61F1141806FBEE528A1A2BF59437D949
903 бит или больше, его необходимо разделить на два или более 512-битных блока.
В первом блоке входные данные будут добавляться по существу так же, как мы описывали повсюду. Единственная разница заключается в последнем шаге.После операции 64 результаты для A, B, C и D добавляются к OIV-A, OIV-B, OIV-C и OIV-D с использованием модульного сложения, как указано выше. Однако эти результаты не будут объединены для формирования окончательного хэша .
Вместо этого результат A + OIV-A будет действовать как вектор инициализации A для начала второго 512-битного блока данных. Результаты B + OIV-B, C + OIV-C и D + OIV-D будут формировать векторы инициализации для B, C и D соответственно в этом втором 512-битном блоке данных.
Вторые 512 бит ввода будут разделены на шестнадцать 32-битных слов, как и начальные 512 бит данных. Каждое из этих новых слов станет M0, M1, M2…M15 для повторного запуска алгоритма MD5. Все остальные переменные будут такими же, как и в предыдущих шагах.
Будет четыре раунда по 16 операций в каждом, всего 64 операции. Каждый раунд будет иметь свою собственную функцию, функции F, G, H и I, которые будут использоваться в том же порядке и таким же образом, как и в прошлый раз.
Если начальный ввод состоял всего из двух 512-битных блоков, последние части хеш-алгоритма MD5 будут выполняться по существу так же, как и в . Последний шаг, после 64 операций , наконец, вывод хэша для двух 512-битных блоков входных данных .
Если исходный ввод состоял из более чем двух 512-битных блоков, выходные данные A, B, C и D, которые в противном случае сформировали бы хэш, вместо этого используются в качестве векторов инициализации для третьего блока.
Этот процесс будет продолжаться до тех пор, пока не будут обработаны все начальные входные данные, независимо от того, сколько 512-битных блоков он занимает. Всякий раз, когда дело доходит до последнего блока, алгоритм будет следовать процессу, описанному в разделе . Последний шаг, после 64 операций , в конечном итоге предоставит нам новые значения для A, B, C и D. Затем они будут объединены для формирования хэш.
Алгоритм MD5Алгоритм MD5 кажется трудоемким процессом, когда вы выполняете каждый из шагов, но наши компьютеры могут сделать все это в одно мгновение. Хотя для нас это требует много работы, результатом этого процесса является алгоритм, который может быть весьма полезен для таких вещей, как проверка целостности данных. Узнайте о хеш-функции MD5, ее других применениях, уязвимостях безопасности и многом другом в нашем Что такое MD5 и как его использовать? статья.
Практическая криптография
В криптографии MD5 (алгоритм Message-Digest 5) — это широко используемая криптографическая хеш-функция со 128-битным хеш-значением. В качестве Интернет-стандарта (RFC 1321) MD5 используется в самых разных приложениях безопасности, а также широко используется для проверки целостности файлов. Хэш MD5 обычно представляет собой 32-значное шестнадцатеричное число.
MD5 — это усиленная версия MD4. Как и MD4, Хэш MD5 был изобретен профессором Рональдом Ривестом из Массачусетского технологического института. Также явно использовался MD5 в качестве модели для SHA-1, поскольку они имеют много общих черт. MD5 и SHA-1 — два наиболее широко используемых хэша. алгоритмы сегодня, но использование MD5, безусловно, со временем будет сокращаться, поскольку теперь считается сломанным [2,3,4].
Хэш MD5 не должен использоваться в криптографических целях. Чтобы сгенерировать хэш фрагмента текста, введите ниже:
Ввод Вычислить Результат Алгоритм §
Хэш MD5 описан в RFC 1321 вместе с реализацией C. MD5 похож на хэш MD4. Заполнение и инициализация идентичны.
MD5 работает с 32-битными словами. Пусть M будет сообщением, которое нужно хэшировать. Сообщение M дополняется так, что его длина (в битах) равна 448 по модулю 512, то есть дополненное сообщение на 64 бита меньше, чем кратное 512. Дополнение состоит из одного бита 1, за которым следует достаточное количество нулей, чтобы дополнить сообщение до необходимой длины. Заполнение используется всегда, даже если длина M равна 448 mod 512. В результате имеется по крайней мере один бит заполнения и не более 512 бит заполнения. Затем длина (в битах) сообщения (до заполнения) добавляется в виде 64-битного блока.
Дополненное сообщение кратно 512 битам и, следовательно, также кратно 32 битам. Пусть M будет сообщением, а N количеством 32-битных слов в (дополненном) сообщении. Из-за заполнения N кратно 16.
Буфер из четырех слов (A,B,C,D) используется для вычисления дайджеста сообщения. Здесь каждый из A, B, C, D является 32-битным регистром. Эти регистры инициализируются следующими шестнадцатеричными значениями:
слово A: 01 23 45 67 слово B: 89 ab cd ef слово C: fe dc ba 98 слово D: 76 54 32 10
Сначала мы определим четыре вспомогательные функции, каждая из которых принимает на вход три 32-битных слова и выдает одно 32-битное слово на выходе.
где логично и, логично или и является логическим xor. Сделайте следующее:
/* Обработка каждого блока из 16 слов. */ Для i = 0 до N/16-1 выполните /* Копируем блок i в X. */ Для j = от 0 до 15 выполните Установите X[j] на M[i*16+j]. конец /* цикла на j */ /* Сохранить A как AA, B как BB, C как CC и D как DD. */ АА = А ББ = Б СС = С ДД = Д /* Раунд 1. */ /* Пусть [abcd k s i] обозначает операцию a = b + ((a + F(b,c,d) + X[k] + T[i])
Алгоритм выше использует набор из 64 констант T[i] для i = от 1 до 64. Пусть T[i] обозначим i-й элемент таблицы, который равно целой части 4294967296, умноженной на abs(sin(i)), где i находится в радианах. Элементы таблицы приведены в приложении RFC 1321.
Различия между MD5 и MD4 §
Существенные различия между MD4 и MD5 заключаются в следующем:
- MD5 имеет четыре патрона, а MD4 — только три. Следовательно, функция сжатия MD5 включает 64 шага, тогда как MD4 функция сжатия имеет 48 шагов.
- Каждый шаг MD5 имеет уникальную аддитивную константу T[i], тогда как каждый раунд MD4 использует фиксированную константу
- Функция G во втором раунде MD5 менее симметрична, чем функция G в MD4
- Каждый шаг MD5 добавляет результат предыдущего шага, который не является случай с MD4. Заявленной целью этой модификации является производство более быстрый лавинный эффект.
- В MD5 порядок доступа к входным словам во втором и третьи раунды менее похожи друг на друга, чем в случае MD4.
- RFC 1321 утверждает, что « количества смен в каждом раунде были приблизительно оптимизированы, чтобы дают более быстрый «лавинный эффект». Кроме того, смены, используемые в каждом раунд MD5 различны, чего нельзя сказать о MD4.
Ссылки §
[1] R. Rivest, RFC 1321 — алгоритм дайджеста сообщения MD5 , апрель 1992 г., на ftp.rfc-editor.org/in-notes/rfc332l.txt
[2] X. Wang and H. Yu, Как взломать MD5 и другие хеш-функции , в http://www. infosec.sdu.edu.cn/paper/md5-attack.pdf
[3] P. Hawkes, M. Paddon, arid G.G. Rose, Musings on the Wang et al. Коллизия MD5 , http://eprint.iacr.org/2004/264.pdf
[4] М. Даум, Криптоанализ хеш-функций семейства MD4, Dissertation zur Erlangurig des Grades eines Doktor der Naturwissenschaften der Ruhr-Universit at Bochum am Fachbereich Mathematik , at www.cits.ruhr-uni-bochum.de/imperia/md/content/magnus/dissmd4.pdf
Включите JavaScript, чтобы просматривать комментарии с помощью Disqus. комментарии от DisqusСодержание
- Алгоритм
- Различия между MD5 и MD4
- Ссылки
Хэш MD5 — Термин кибер-библиотеки CyberHoot
Хэш MD5 — это алгоритм хеширования, представляющий собой одностороннюю криптографическую функцию, которая принимает на вход сообщение любой длины и возвращает на выходе значение дайджеста фиксированной длины, используемое для аутентификации исходного сообщения. Хэш-функция MD5 изначально была разработана для использования в качестве безопасного криптографического хэш-алгоритма для аутентификации цифровых подписей. Хотя хэш MD5 устарел для большинства криптографических применений, он по-прежнему используется в качестве некриптографической «контрольной суммы» для проверки целостности файлов при загрузке установочных файлов перед их выполнением. Это остается ценной проверкой достоверности загружаемого файла, чтобы убедиться, что он не содержит вредоносных программ или скрытых лазеек.
Один из подходов к проверке целостности данных (проверка файлов) заключается в создании хэш-значения MD5 при создании контента и размещении его на веб-сайте для загрузки. Затем могут выполняться текущие проверки файла для проверки его хэша MD5 (с использованием контрольной суммы) либо после периода хранения и представления в Интернете, либо конечными пользователями после загрузки файла. Хэш-значения сравниваются, и если они совпадают, это указывает на то, что данные не повреждены и не были изменены.
Что это означает для SMB?
Хэши MD5 можно использовать перед выполнением файлов, чтобы проверить, не был ли файл подделан до его выполнения и установки. Это делается путем исследования хэша MD5 файла (совет — исследуйте и сравнивайте хеш MD5, представленный на нескольких веб-сайтах) и сравнивайте их с загруженным файлом. Это может подтвердить, что новый загруженный вами файл не был подделан.
Важно всегда быть уверенным, что вы устанавливаете на свои устройства безопасные приложения или файлы. Это может быть распространено на исправления от поставщиков, чтобы также проверить целостность их файлов.
В дополнение к приведенным выше рекомендациям вы также можете проверить отзывы на веб-сайтах, страну происхождения приложения или репутацию разработчиков. Каждый из них может обеспечить вам постепенное повышение доверия к загруженному файлу перед его установкой на ваш компьютер.
Дополнительные рекомендации по кибербезопасности для бизнеса
Приведенные ниже рекомендации помогут вам и вашему бизнесу защититься от различных угроз, с которыми вы сталкиваетесь ежедневно. Все перечисленные ниже предложения могут быть реализованы в вашей компании, воспользовавшись услугами CyberHoot vCISO. Чтобы получить предложение vCISO, отправьте электронное письмо по адресу [email protected].
- Управляйте сотрудниками с помощью политик и процедур. Всем компаниям нужен как минимум пароль, допустимое использование, обработка информации и письменные политики информационной безопасности (также известные как WISP).
- Обучите сотрудников тому, как обнаруживать фишинговые атаки и избегать их. Внедрите систему управления обучением, такую как продукт CyberHoot, чтобы обучить сотрудников навыкам, необходимым для повышения уверенности в себе, продуктивности и безопасности.
- Проверка сотрудников на фишинговые атаки для тренировки. Фиш-тестирование CyberHoot позволяет предприятиям тестировать сотрудников с помощью правдоподобных фишинговых атак и направлять тех, кто не прошел обучение, для исправления фишинга.
- Разверните критически важные технологии кибербезопасности, включая двухфакторную аутентификацию, для всех важных учетных записей. Включите фильтрацию спама в электронной почте, проверяйте резервные копии, разверните DNS-защиту, антивирус и защиту от вредоносных программ на всех своих конечных устройствах.
- В современную эпоху работы из дома убедитесь, что вы управляете личными устройствами, подключающимися к вашей сети, проверяя их безопасность (исправление, антивирус, защита DNS и т. д.) или полностью запрещая их использование.
- Если за последние 2 года вы не проходили оценку риска третьей стороной, вам следует провести ее сейчас. Создание системы управления рисками в вашей организации имеет решающее значение для устранения самых вопиющих рисков с ограниченным временем и деньгами.
- Приобретите Cyber-Insurance, чтобы защитить себя в случае катастрофического сбоя. Киберстрахование ничем не отличается от страхования автомобиля, пожара, наводнения или жизни. Он рядом, когда вам это нужно больше всего.
Все эти рекомендации встроены в продукт CyberHoot и/или услуги vCISO. С CyberHoot вы можете управлять, обучать, оценивать и тестировать своих сотрудников. Посетите CyberHoot.com и подпишитесь на наши услуги или напишите по адресу [email protected] для бесплатной консультации. Сделайте это сегодня, потому что вы никогда не знаете, когда произойдет нападение. По крайней мере, продолжайте учиться, подписавшись на наши ежемесячные информационные бюллетени по кибербезопасности, чтобы оставаться в курсе текущих угроз кибербезопасности, уязвимостей и последних новостей.
Чтобы узнать больше о хешах MD5, посмотрите это короткое 4-минутное видео:
CyberHoot имеет некоторые другие ресурсы, доступные для вашего использования. Ниже приведены ссылки на все наши ресурсы, не стесняйтесь просматривать их в любое время:
- Блог
- Cybrary (кибер-библиотека)
- Инфографика
- Информационные бюллетени
- Пресс-релизы
- Обучающие видео – очень полезные (инструкции) для наших суперпользователей!
Примечание. Если вы хотите подписаться на нашу рассылку, перейдите по любой ссылке выше (кроме инфографики), введите свой адрес электронной почты в правой части страницы и нажмите « Отправить мне рассылку новостей».
Вычислить MD5/SHA1/CRC32 хэш файлов
HashMyFiles v2.43 — Расчет хэшей MD5/SHA1/CRC32 ваших файлов
Copyright (c) 2007 — 2021 Нир СоферСм. также
- Утилита SearchMyFiles. Вы можете использовать режим поиска дубликатов в этой утилите для поиска дубликатов файлов в вашей системе.
- NK2Edit — редактирование, объединение и исправление файлов автозаполнения (.NK2) Microsoft Outlook.
Описание
HashMyFiles — небольшая утилита, позволяющая вычислять хэши MD5 и SHA1 одного или нескольких файлов в вашей системе. Вы можете легко скопировать список хешей MD5/SHA1 в буфер обмена или сохранить их в файл text/html/xml.
HashMyFiles также можно запустить из контекстного меню проводника Windows и отобразить хэши MD5/SHA1. выбранного файла или папки.Системные требования
Эта утилита работает в Windows 2000/XP/2003/Vista/Windows 7/Windows 8/Windows 10. Более старые версии Windows не поддерживаются.История версий
- Версия 2.43:
- Добавлен параметр командной строки /cfg для запуска HashMyFiles с указанным файлом конфигурации.
- Версия 2.42:
- Добавлен параметр «Режим перетаскивания/вставки папки проводника», который управляет способом добавления папки при перетаскивании папки из проводника Windows или вставке папки из проводника Windows.
- Можно выбрать 2 варианта: «Добавить только файлы из базовой папки» (опция по умолчанию) или «Добавить файлы из базовой папки и всех ее подпапок».
- Добавлена возможность изменить столбец сортировки из меню (Вид -> Сортировать по). Как и при сортировке щелчком по заголовку столбца, если вы снова щелкнете тот же пункт меню сортировки, он будет переключаться между порядком возрастания и убывания.
- Версия 2.41:
- Исправлена ошибка: строка «Открыть на веб-сайте VirusTotal» в меню проводника не загружалась из файла перевода.
- Версия 2.40:
- Процесс хэширования очень больших файлов теперь выполняется быстрее, чем в предыдущих версиях.
- Исправлено отображение хэшей для файлов нулевой длины.
- Версия 2.38:
- Обновлен параметр «Открыть на веб-сайте VirusTotal» для работы с хэшами SHA1 и MD5.
- Версия 2.37:
- Добавлена возможность выбора другого шрифта (имя и размер) для отображения в главном окне (Параметры -> Выбрать другой шрифт).
- Версия 2.36:
- Исправлена другая проблема при хэшировании нескольких файлов из контекстного меню Проводника.
- Версия 2.35:
- Снова исправлена опция «Открыть на веб-сайте VirusTotal», поскольку ссылка на 2.33 не работала для некоторых пользователей. Кроме того, HashMyFiles отображает сообщение об ошибке, если вы попытаетесь использовать эту опцию, когда SHA256 отключен, поскольку VirusTotal больше не поддерживает хэши MD5.
- Добавлены параметры «Копировать SHA384» и «Копировать SHA512».
- Исправлена проблема при хешировании нескольких файлов из контекстного меню Проводника.
- Версия 2.33:
- Добавлен значок HashMyFiles в контекстное меню проводника.
- Исправлен параметр «Открыть на веб-сайте VirusTotal», чтобы открыть ссылку, позволяющую повторно проанализировать файл.
- Версия 2.32:
- Исправлена ошибка: HashMyFiles не мог запомнить последний размер/положение окна свойств, если оно не находилось на основном мониторе.
- Версия 2.31:
- Теперь вы можете изменить размер окна свойств, а последний размер/положение этого окна сохраняется в файле .cfg.
- Версия 2.30:
- Параметры копирования MD5/SHA1/SHA256 теперь работают с несколькими выбранными элементами.
- Версия 2.25:
- Добавлены параметры командной строки для включения/отключения определенных типов хэшей, например:
HashMyFiles. exe /MD5 1 /SHA1 1 /SHA256 0
- Добавлены параметры командной строки для включения/отключения определенных типов хэшей, например:
- Версия 2.24:
- Добавлена опция «Открыть папку в проводнике».
- Версия 2.23:
- Исправлен параметр «Отметить хэш в буфере обмена» для работы с неограниченным количеством хэшей (в предыдущих версиях он был ограничен 255 символами).
- Версия 2.22:
- Добавлен столбец «Время изменения записи» (доступно только в Windows Vista или более поздних версиях с файловой системой NTFS).
- Версия 2.21:
- Исправлена ошибка: HashMyFiles создавал CSV-файл без заголовка при использовании параметра командной строки /SaveDirect с включенным параметром «Добавить строку заголовка в CSV/файл с разделителями табуляцией».
- Версия 2.20:
- Исправлена ошибка, из-за которой параметр «Открыть на веб-сайте VirusTotal» работал правильно, когда включен параметр «Показывать хэши в верхнем регистре».
- Версия 2.19:
- В столбец «Атрибуты файла» добавлена новая информация: «I» для «Содержимое не проиндексировано», «E» для зашифрованного файла, «X» для «Файл без очистки» и «V» для «Атрибут целостности».
- Версия 2.18:
- Исправлена ошибка: параметр «Запуск от имени администратора» не работал на некоторых системах.
- Версия 2.17:
- Исправлена ошибка: в столбце расширения отображалось неправильное значение, когда имя папки содержало символ точки.
- Увеличен размер нижней строки состояния для отображения длинных путей.
- Версия 2.16:
- Контекстное меню проводника внутри HashMyFiles: при щелчке правой кнопкой мыши по одному элементу, удерживая нажатой клавишу Shift, HashMyFiles теперь отображает контекстное меню проводника Windows вместо контекстного меню HashMyFiles.
- Версия 2.15:
- Добавлен параметр командной строки /SaveDirect для использования с другими параметрами командной строки сохранения (/scomma, /stab, /sxml и т. д.), что позволяет экспортировать хэши прямо в файл, вместо того, чтобы накапливать все хэши в памяти, а затем сохранять их в файл в конце.
- Версия 2.11:
- Добавлена опция «Запуск от имени администратора» (Ctrl+F11).
- Версия 2.10:
- Добавлена клавиша быстрого доступа к опции «Открыть на веб-сайте VirusTotal». (Ctrl+R)
- Исправлена ошибка, из-за которой параметр «Открыть на веб-сайте VirusTotal» правильно работал с хэшем MD5, когда хэш SHA256 отсутствует.
- Исправлена ошибка: HashMyFiles не мог запомнить последний размер/положение главного окна, если оно не находилось на основном мониторе.
- Версия 2.05:
- Добавлена возможность добавить «Открыть на веб-сайте VirusTotal» в контекстное меню проводника Windows. При щелчке правой кнопкой мыши по файлу в проводнике Windows и выбрав «Открыть на веб-сайте VirusTotal», HashMyFiles вычисляет хэш этого файла, а затем открывает его на веб-сайте VirusTotal.
- Добавлен параметр командной строки /virustotal, который вычисляет хэш указанного файла и затем открывает его на веб-сайте VirusTotal.
- Версия 2.03:
- Исправлено HashMyFiles для правильной обработки летнего времени, как Проводник в Windows 7.
- Версия 2.02:
- Добавлен параметр «Копировать SHA256» (F11)
- Версия 2.01:
- Если хэш SHA256 не активен, опция «Открыть на веб-сайте VirusTotal» теперь работает с хешами MD5.
- Версия 2.00:
- Добавлена опция «Открыть на веб-сайте VirusTotal». (Работает только при активном хеше SHA256)
Если у вас есть программный файл, который другие люди уже отправили на VirusTotal, этот параметр откроет веб-страницу на веб-сайте VirusTotal с результатом антивирусного сканирования.
- Добавлена опция «Открыть на веб-сайте VirusTotal». (Работает только при активном хеше SHA256)
- Версия 1.97:
- Теперь вы можете использовать строки среды в параметрах «Добавить папку» и «Добавить по подстановочному знаку» (например: %AppData%\*.* )
- Добавлена 64-битная сборка.
- Версия 1.96:
- Исправлена ошибка: HashMyFiles отображал хэши для пустых файлов и помечал их как идентичные строке в буфере обмена.
- Исправлено мерцание при прокрутке списка хешей.
- Версия 1.95:
- При выборе одного или нескольких файлов, расположенных в удаленной сети, и выборе «Переместить в корзину», HashMyFiles теперь спросит вас, хотите ли вы удалить файлы, потому что удаленные сетевые файлы не могут быть отправлены в корзину.
- Когда HashMyFiles спрашивает, следует ли удалить файлы или переместить их в корзину, ответ по умолчанию теперь установлен на «Нет».
- Изменение клавиш быстрого доступа: клавиша Del теперь используется для опции «Удалить выбранные файлы».
- Добавлен параметр «Отметить нечетные/четные строки» в меню «Вид». Когда он включен, нечетные и четные строки отображаются разным цветом, чтобы облегчить чтение одной строки.
- Добавлен параметр «Автоматический размер столбцов и заголовков», который позволяет автоматически изменять размер столбцов в соответствии со значениями строк и заголовками столбцов.
- Версия 1. 90:
- Исправлена ошибка: HashMyFiles не мог правильно обнаружить идентичные файлы, если пользователь снял отметки с типов хэшей MD5, SHA1 и CRC32.
- Версия 1.89:
- Исправлена ошибка: HashMyFiles не отображал хэш, если пользователь снял отметки с типов хэшей MD5, SHA1 и CRC32.
- Версия 1.88:
- Исправлен параметр «Пометить хэш в буфере обмена» для работы с CRC32.
- Версия 1.87:
- Исправлена ошибка: параметр «Пометить хэш в буфере обмена» не работал с хэшами SHA-256, SHA-512 и SHA-384.
- Версия 1.86:
- Исправлена ошибка: HashMyFiles не отображал информацию о размере и дате/времени для имени файла, начинающегося с символа точки.
- Версия 1.85:
- Добавлена поддержка хэшей SHA-384. (Поддерживается в Windows XP/SP3, Windows Vista, Windows 7, Windows Server 2003 и Windows Server 2008)
- Версия 1.81:
- Добавлен «Режим отображения CRC32» — шестнадцатеричный или десятичный.
- Версия 1.80:
- Добавлена поддержка хэшей SHA-256 и SHA-512. Эти хэши поддерживаются в Windows XP/SP3, Windows Vista, Windows 7, Windows Server 2003 и Windows Server 2008.
- Версия 1.72:
- Теперь вы можете перетащить один или несколько файлов из окна HashMyFiles в окно Проводника или другое приложение.
- Версия 1.71:
- Добавлено «Удалить выбранные файлы» (Ctrl+R), которое удаляет выбранные файлы из списка хэшей.
- Версия 1.70:
- Добавлен параметр «Добавить строку заголовка в CSV/файл с разделителями табуляцией». Когда эта опция включена, имена столбцов добавляются в качестве первой строки при экспорте в CSV или файл с разделителями табуляции.
- Версия 1.68:
- В контекстное меню добавлен пункт «Копировать CRC32».
- Версия 1.67:
- Добавлена опция «Копировать CRC32».
- Версия 1.66:
- В окне «Добавить по шаблону» кнопка обзора теперь работает правильно.
- Версия 1.65:
- Добавлен параметр «Добавить по подстановочному знаку» (F6), который позволяет добавлять несколько файлов, указав подстановочный знак и глубину подпапки.
- Добавлен параметр командной строки /wildcard для использования нового параметра «Добавить по шаблону» из командной строки.
- Версия 1.61:
- Исправлена ошибка: Экспорт в файлы .csv работал неправильно, если одно из значений содержало запятые.
- Версия 1.60:
- Добавлен столбец «Атрибуты файла».
- Добавлена опция «Показывать время по Гринвичу».
- Добавлена опция «Переместить в корзину».
- Исправлена проблема с отсутствующими значками в Windows7/x64.
- Версия 1.55:
- Добавлена опция «Удалить выбранные файлы», которая позволяет легко удалять повторяющиеся файлы.
- Версия 1.52:
- Добавлены параметры командной строки для сортировки.
- Версия 1.51:
- Исправлена ошибка: время изменения и время создания отображали одну и ту же дату/время.
- Версия 1.50:
- Добавлена опция «Вставить проводник», которая позволяет вставлять список файлов, скопированных из окна проводника или из любого другого программного обеспечения. которые копируют файлы в буфер обмена, включая некоторые утилиты NirSoft, такие как ПоискМоиФайлы, IECacheView и RegDllView. (используя опцию «Копировать в проводнике»)
- Версия 1.47:
- Исправлена ошибка: в последней версии не работали параметры командной строки сохранения.
- Версия 1.46:
- Исправлена проблема: когда окно HashMyFiles скрыто, а на панели задач есть значок, повторный запуск HashMyFiles откроет существующий экземпляр HashMyFiles вместо создания другого.
- Версия 1.45:
- Добавлена опция «Поместить значок в трей».
- Версия 1. 43:
- Когда вы указываете пустую строку («») в параметре командной строки /folder, HashMyFiles теперь будет использовать текущую папку.
- Версия 1.42:
- Добавлено автозаполнение для диалогового окна выбора папки
- Версия 1.41:
- Исправлена ошибка: опция «Отметить хэш в буфере обмена» помечала все хэши, когда один или несколько типов хэшей были отменены.
- Версия 1.40:
- Добавлено подменю «Типы хэшей» в настройках. Позволяет вам выбрать, какие типы хэшей вы хотите рассчитать.
- Версия 1.37:
- Исправлена ошибка: при перетаскивании файла в окно HashMyFiles, когда он уже обработан HashMyFiles, файл добавлялся несколько раз.
- Версия 1.36:
- Исправлена ошибка: при выборе «Добавить файлы во вложенные папки» добавлялись только файлы из вложенных папок.
- Версия 1.35:
- Добавлено диалоговое окно «Выбрать папку».
- Добавлена новая опция: «Добавить файлы во вложенные папки».
- Добавлен параметр командной строки /folders
- Добавлен столбец расширения файла.
- Размер диалогового окна «Выбор процесса» теперь можно изменять.
- Версия 1.31:
- Добавлена поддержка добавления нескольких файлов в опцию «Добавить файл».
- Версия 1.30:
- Добавлены новые столбцы: Версия файла и Версия продукта. (для exe и dll файлов)
- Версия 1.29:
- Исправлена ошибка: главное окно теряло фокус, когда пользователь переключался на другое приложение, а затем возвращался обратно в HashMyFiles.
- Версия 1.28:
- Отображать информацию о ходе выполнения одного файла (в процентах) при хешировании больших файлов.
- Версия 1.27:
- Добавлен новый тип файла в сохранение — файл с разделителями-запятыми (.csv)
- Добавлен новый параметр командной строки — /scomma
- Версия 1. 26:
- Параметр «Пометить идентичные хэши» — теперь также работает с сохраненными файлами HTML и отчетами HTML.
- Версия 1.25:
- Добавить новый столбец: «Идентичные» — при наличии 2 или более одинаковых хэшей этот столбец заполняется числом. (1 для первых одинаковых хэшей, 2 для вторых и так далее…)
- Добавить опцию «Пометить идентичные хэши» — пометить идентичные хэши до 8 разными цветами.
- Версия 1.20:
- Исправлена ошибка: при использовании параметра «Добавить файлы обработки» имена файлов отображались в формате короткого пути.
- Версия 1.19:
- Новый параметр командной строки: /files (поддержка загрузки нескольких файлов)
- Версия 1.18:
- Исправлена ошибка в версии Unicode: в опцию копирования буфера обмена добавлялись неправильные символы.
- Версия 1.17:
- Добавлена опция «Отметить хэш в буфере обмена». Если выбран этот параметр, хэш, который вы копируете в буфер обмена, сравнивается с хэшами MD5/SHA1. которые в данный момент отображаются в HashMyFiles. Если есть совпадение, решетка выделяется зеленым цветом.
- Версия 1.16:
- Добавлены символы «FF FE» в начало сохраненных файлов Unicode (только версия Unicode).
- Версия 1.15:
- Исправлена ошибка: HashMyFiles оставался в памяти, если вы закрывали его при вычислении хэшей.
- Новая опция: «Добавить файлы процесса» — позволяет получить хэши всех DLL-файлов выбранного процесса.
- Версия 1.10:
- Контекстное меню проводника — если экземпляр HashMyFiles уже запущен, выбранные файлы будет добавлен к существующему экземпляру вместо создания нового.
- Значки файлов теперь отображаются в соответствии с типом файла.
- Новая опция: Всегда сверху.
- Добавлен пункт меню «Стоп» при вычислении хэшей.
- Добавлены вычисления CRC32.
- Добавлены новые столбцы: время изменения, время создания и размер файла.
- Версия 1.00 — первый выпуск.
Использование HashMyFiles
HashMyFiles не требует установки или дополнительных файлов DLL. Для того, чтобы начать его использовать, просто запустите исполняемый файл (HashMyFiles.exe).
После запуска вы можете добавить файлы и папки, для которых вы хотите просмотреть их хэши MD5/SHA1. Вы можете сделать это, используя параметры «Добавить файл» и «Добавить папку» в меню «Файл» или просто перетащив файлы и папки из Проводника в главное окно HashMyFiles.
После добавления нужных файлов вы можете скопировать хэши MD5/SHA1 в буфер обмена или сохранить список хэшей в текстовый/html/xml-файл.Контекстное меню проводника
HashMyFiles также можно использовать непосредственно из проводника Windows. Чтобы включить эту функцию, перейдите в меню «Параметры» и выберите параметр «Включить контекстное меню проводника». После включения этой функции вы можете щелкнуть правой кнопкой мыши любой файл или папку в проводнике Windows и выбрать Пункт меню «HashMyFiles».
: Если вы запустите опцию HashMyFiles для папки, она отобразит хэши для всех файлов в выбранной папке.
Если вы запустите параметр HashMyFiles для одного файла, он отобразит хэши только для этого файла.Примечание. Элементы статического меню проводника могут не работать с несколькими файлами. Если вы используете контекстное меню HashMyFiles с несколькими файлами, возможно, будет открыто несколько экземпляров HashMyFiles.
Если вы хотите получить хэш нескольких файлов из окна проводника, используйте копирование и вставку проводника или перетащите файлы в окно HashMyFiles.Параметры командной строки
/file <имя файла | Папка | Подстановочный знак> Задает имя файла, папки или подстановочного знака, которые вы хотите хэшировать. /files <имя файла> <имя файла> <имя файла> … Укажите несколько имен файлов, папок или подстановочных знаков, которые вы хотите хэшировать. /folder <Папка> Указывает папку и все вложенные в нее папки. /wildcard <Подстановочный знак полного пути> <Глубина подпапки> Указывает подстановочный знак с полным путем (например, c:\folder\*.exe) и глубиной сканирования подпапок. Для параметра <Глубина подпапки>: 0 = нет подпапок, 1 = один уровень подпапок, 2 = два уровня подпапок и т. д. 1000 = бесконечное количество подпапок. /virustotal <имя файла> Вычисляет хэш указанного файла, а затем открывает его на веб-сайте VirusTotal.
/MD5 {0 | 1}
/SHA1 {0 | 1}
/CRC32 {0 | 1}
/SHA256 {0 | 1}
/SHA512 {0 | 1}
/SHA384 {0 | 1}Позволяет включать/выключать указанный тип хэша (0 = выключить, 1 = включить). Например:
HashMyFiles.exe /MD5 1 /SHA1 1 /SHA256 0/cfg <имя файла> Запустите HashMyFiles с указанным файлом конфигурации. Например:
HashMyFiles.exe /cfg «c:\config\hmf.cfg»
HashMyFiles.exe /cfg «%AppData%\HashMyFiles.cfg»/stext <имя файла> Сохраните список хэшей в обычный текстовый файл. /stab <имя файла> Сохраните список хэшей в текстовый файл с разделителями табуляцией. /stabular <имя файла> Сохраните список хэшей в виде табличного текстового файла. /shtml <имя файла> Сохраните список хэшей в файл HTML (горизонтальный). /sverhtml <имя файла> Сохраните список хэшей в файл HTML (вертикальный). /sxml <имя файла> Сохраните список хэшей в файл XML. /scomma <имя файла> Сохраните список хэшей в файл с разделителями-запятыми. /сортировать <столбец> Этот параметр командной строки можно использовать с другими параметрами сохранения для сортировки по нужному столбцу. Если вы не укажете эту опцию, список будет отсортирован в соответствии с последней сортировкой, которую вы сделали из пользовательского интерфейса. Параметр может указывать индекс столбца (0 для первого столбца, 1 для второго столбца и т. д.) или имя столбца, например «Имя файла» и «Идентичный». Вы можете указать символ префикса «~» (например, «~Identical»), если хотите отсортировать в порядке убывания. Вы можете указать несколько / sort в командной строке, если хотите сортировать по нескольким столбцам. /носорт Если вы укажете этот параметр командной строки, список будет сохранен без какой-либо сортировки. /СохранитьПрямой Сохраните список хэшей в режиме SaveDirect. Для использования с другими параметрами командной строки сохранения (/scomma, /stab, /sxml и т. д.). Когда вы используете режим SaveDirect, хэш-строки сохраняются непосредственно на диск, без предварительной загрузки в память. Это означает, что вы можете сохранить список с большим количеством хэшей на свой диск без каких-либо проблем с памятью, если у вас достаточно места на диске для хранения сохраненного файла. Недостаток этого режима: вы не можете сортировать строки в соответствии с столбцом, выбранным с помощью параметра командной строки /sort. Примеры:
HashMyFiles.exe /file «c:\temp\*.zip» /shtml «c:\temp\1.html»
HashMyFiles.exe /file «d:\temp\myfile.zip» /stab «d:\temp\myfile.txt»
HashMyFiles.exe /file «d:\мои файлы»
HashMyFiles.exe /files «c:\temp\*.zip» «c:\temp\1234.exe» «c:\temp\Hello.exe» /shtml «c:\temp\1.html»
HashMyFiles.exe /папка «c:\temp» /shtml «c:\temp\1.html»
HashMyFiles.exe /folder «c:\temp» /shtml «c:\temp\1.html» /sort «Идентичен» /sort «Имя файла»
HashMyFiles.exe /папка «c:\temp» /shtml «c:\temp\1.html» /sort ~1
HashMyFiles.exe /wildcard «c:\temp\*.zip» 1 /shtml «c:\temp\1.html»
HashMyFiles.exe /SaveDirect /папка «c:\temp» /scomma «c:\temp\1. csv»Перевод HashMyFiles на другие языки
Чтобы перевести HashMyFiles на другой язык, следуйте приведенным ниже инструкциям:- Запустите HashMyFiles с параметром /savelangfile:
HashMyFiles.exe /savelangfile
В папке утилиты HashMyFiles будет создан файл с именем HashMyFiles_lng.ini. - Откройте созданный языковой файл в Блокноте или любом другом текстовом редакторе.
- Перевести все строковые записи на нужный язык. При желании вы также можете добавить свое имя и/или ссылку на свой веб-сайт. (значения TranslatorName и TranslatorURL) Если вы добавите эту информацию, она будет используется в окне «О программе».
- После того, как вы закончите перевод, запустите HashMyFiles, и все переведенные
строки будут загружены из языкового файла.
Если вы хотите запустить HashMyFiles без перевода, просто переименуйте языковой файл или переместите его в другую папку.
Лицензия
Эта утилита распространяется бесплатно. Вам разрешено свободно распространять эту утилиту на дискетах, CD-ROM, Интернет, или любым другим способом, главное, чтобы вы ничего за это не брали. Если вы распространяете эту утилиту, вы должны включить все файлы в дистрибутив, без каких-либо модификаций!Отказ от ответственности
Программное обеспечение предоставляется «КАК ЕСТЬ» без каких-либо явных или подразумеваемых гарантий, включая, но не ограничиваясь, подразумеваемые гарантии товарного состояния и пригодности для определенной цели. Автор не несет ответственности за какие-либо особые, случайные, косвенный или косвенный ущерб из-за потери данных или по любой другой причине.Обратная связь
Если у вас есть проблема, предложение, комментарий или вы нашли ошибку в моей утилите, вы можете отправить сообщение на [email protected]
HashMyFiles также доступен на других языках. Для того, чтобы изменить язык HashMyFiles, загрузите zip-файл соответствующего языка, извлеките «hashmyfiles_lng.ini», и поместите его в ту же папку, в которой установлена утилита HashMyFiles.Скачать HashMyFiles Скачать HashMyFiles для 64-битных систем Скачать HashMyFiles — версия без Юникода (для Windows 98) Арабский Ammar Kurd 22/01/2019 Бразильский Португаланский Нидер Карлов 18.10.2020 2,37 Чехия Бухтич 18.07.2012 1,90 Голландский Ян Верхейен 12.02.2021 2,43 Французский Энтони МАГНАН (Netbew) 02.10.2022 2,43 Немецкий «Латиноамериканец» на WinTotal.de 12.02.2021 2.43 Немецкий В. Добиаш; Б. Гемслебен 12.14.2010 Греческий geogeo.gr 31/05/2018 2,30 Венгерский Hevesi János 17/07/2008 Italian Styb 15/12/2021 2. 43 Italian Fabius 17/12/2014 Японский Хироаки Накано 07.10.2021 2,41 Японский Гизмон 04.12.2020 2,36 Корейский Джэхён Ли 03.02.2021 Норвежский Мартин Вайс 10.08.2019 Персидский DinoTechno 26/03/2022 2.43 Polish Arek Czak Lipiany 14/04/2012 Portuguese Brazil Marcos Brandão Carvalho 05/04/2009 Румынский Jaff (Oprea Nicolae) 29.07.2013 2.01 Русский usbflash && Dm. Ерохин 09.16.2021 2,42 Упрощенный китайский Qiang 12. 04.2021 2,43 Упрощенный китайский Lucas Yingerson 02.07.2021 2,37 Упрощенный китайский Дикмур 24.07.2021 2.41 Сербский ОЗЗИИ 28.12.2011 Сербская Danijel Muharemovic 23/07/2014 Slovak František Fico 15/12/2021 2.43 Spanish Рикардо А. Ривас 03.08.2021 2,38 Шведский Лейф Ларссон 11/12/2009 1,60 Традиционный китайский Катун (修訂 修訂) 27/12/2014 2,10 4085. Jamese.WeiChun 07.03.2015 2.11 Традиционный китайский Danfong Hsieh 15/09/2021 Thai Surachet Km.