Md5 класс
Содержание:
Методы
Освобождает все ресурсы, используемые классом HashAlgorithm.Releases all resources used by the HashAlgorithm class. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданного массива байтов.Computes the hash value for the specified byte array. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданного объекта Stream.Computes the hash value for the specified Stream object. (Унаследовано от HashAlgorithm) |
|
(Унаследовано от HashAlgorithm) |
|
Создает экземпляр реализации по умолчанию хэш-алгоритма MD5.Creates an instance of the default implementation of the MD5 hash algorithm. |
|
Создает экземпляр заданной реализации хэш-алгоритма MD5.Creates an instance of the specified implementation of the MD5 hash algorithm. |
|
Освобождает все ресурсы, используемые текущим экземпляром класса HashAlgorithm.Releases all resources used by the current instance of the HashAlgorithm class. (Унаследовано от HashAlgorithm) |
|
Освобождает неуправляемые ресурсы, используемые объектом HashAlgorithm, а при необходимости освобождает также управляемые ресурсы.Releases the unmanaged resources used by the HashAlgorithm and optionally releases the managed resources. (Унаследовано от HashAlgorithm) |
|
Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object. (Унаследовано от Object) |
|
Служит в качестве хэш-функции по умолчанию.Serves as the default hash function. (Унаследовано от Object) |
|
Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance. (Унаследовано от Object) |
|
Если переопределено в производном классе, передает данные, записанные в объект, на вход хэш-алгоритма для вычисления хэша.When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. (Унаследовано от HashAlgorithm) |
|
Передает записываемые в объект данные в хэш-алгоритм для вычисления хэша.Routes data written to the object into the hash algorithm for computing the hash. (Унаследовано от HashAlgorithm) |
|
Если переопределено в производном классе, завершает вычисление хэша после обработки последних данных криптографическим хэш-алгоритмом.When overridden in a derived class, finalizes the hash computation after the last data is processed by the cryptographic hash algorithm. (Унаследовано от HashAlgorithm) |
|
Сбрасывает хэш-алгоритм в исходное состояние.Resets the hash algorithm to its initial state. (Унаследовано от HashAlgorithm) |
|
Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object. (Унаследовано от Object) |
|
Возвращает строку, представляющую текущий объект.Returns a string that represents the current object. (Унаследовано от Object) |
|
Вычисляет хэш-значение для заданной области входного массива байтов и копирует указанную область входного массива байтов в заданную область выходного массива байтов.Computes the hash value for the specified region of the input byte array and copies the specified region of the input byte array to the specified region of the output byte array. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array. (Унаследовано от HashAlgorithm) |
|
Пытается вычислить хэш-значение для заданного массива байтов.Attempts to compute the hash value for the specified byte array. (Унаследовано от HashAlgorithm) |
|
Пытается завершить вычисление хэша после обработки последних данных хэш-алгоритмом.Attempts to finalize the hash computation after the last data is processed by the hash algorithm. (Унаследовано от HashAlgorithm) |
Примечания
- (англ.). RSA Laboratories (2000). Дата обращения 11 июля 2009.
- ↑ .
- .
- ↑ Hans Dobbertin. . Дата обращения 22 октября 2015.
- ↑ Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. (англ.) (17 августа 2004). Дата обращения 19 ноября 2008.
- Arjen Lenstra, Xiaoyun Wang and Benne de Weger. . eprint.iacr.org (1 марта 2005).
- ↑ Vlastimil Kli’ma. (англ.) (17 апреля 2006). Дата обращения 19 ноября 2008.
- (англ.). kb.cert.org (30 December 2008). Дата обращения 10 октября 2015.
- Tao Xie, Dengguo Feng. (PDF) (16 декабря 2010). Дата обращения 16 октября 2015.
- . Marc-stevens.nl (2012). Дата обращения 16 октября 2015.
- Иными словами, в таблице представлены по 32 бита после десятичной запятой от значений функции sin, где аргумент n в радианах.
- . Anna University (2012). Дата обращения 20 октября 2015.
- .
- ↑ . Internet Engineering Task Force (март 2011). Дата обращения 23 октября 2015.
- (недоступная ссылка). InsidePro Software. — Программа для восстановления паролей к хешам различных типов. Дата обращения 19 ноября 2008.
- . Center for Education and Research in Information Assurance and Security (июнь 2000). Дата обращения 19 ноября 2008.
- Philip Hawkes, Michael Paddon, Gregory G. Rose. (англ.) (13 октября 2004). Дата обращения 19 ноября 2008.
- ↑ .
- Vlastimil Klima. (англ.). Дата обращения 19 ноября 2008.
- .
- Marc Stevens, Arjen Lenstra and Benne de Weger. (30 ноября 2007).
- Ilya Mironov. . Microsoft Research (14 ноября 2005).
- Hardening Linux (англ.)
- Bill Swingle. (2006). Дата обращения 20 ноября 2008.
- Vicki Stanfield, Roderick W. Smith. Linux System Administration (Craig Hunt Linux Library). — 2. — Sybex, 2002. — С. 479—483. — 656 с. — ISBN 978-0782141382.
- Hossein Bidgoli. The Internet Encyclopedia, Volume 3. — 1. — Wiley, 2003. — С. 3—4. — 908 с. — ISBN 978-0471222019.
- Krawczyk, Hugo, Canetti, Ran, Bellare, Mihir. . tools.ietf.org. Дата обращения 5 декабря 2015.
- Steven Alexander. . USENIX 2004 (июнь 2004).
Примеры использования
Ранее считалось, что MD5 позволяет получать относительно надёжный идентификатор для блока данных. На данный момент данная хеш-функция не рекомендуется к использованию, так как существуют способы нахождения коллизий с приемлемой вычислительной сложностью.
Свойство уникальности хеша широко применяется в разных областях. Стоит отметить, что приведенные примеры относятся и к другим .
С помощью MD5 проверяли целостность и подлинность скачанных файлов — так, некоторые программы поставляются вместе со значением контрольной суммы. Например, пакеты для инсталляции свободного ПО.
MD5 использовался для хеширования паролей. В системе UNIX каждый пользователь имеет свой пароль и его знает только пользователь. Для защиты паролей используется хеширование. Предполагалось, что получить настоящий пароль можно только полным перебором. При появлении UNIX единственным способом хеширования был DES (Data Encryption Standard), но им могли пользоваться только жители США, потому что исходные коды DES нельзя было вывозить из страны. Во FreeBSD решили эту проблему. Пользователи США могли использовать библиотеку DES, а остальные пользователи имеют метод, разрешённый для экспорта. Поэтому в FreeBSD стали использовать MD5 по умолчанию.. Некоторые Linux-системы также используют MD5 для хранения паролей.
Многие системы используют базы данных для аутентификации пользователей и существует несколько способов хранения паролей:
- Пароли хранятся как есть. При взломе такой базы все пароли станут известны.
- Хранятся только хеши паролей. Найти пароли можно используя заранее подготовленные таблицы хешей. Такие таблицы составляются из хешей простых или популярных паролей.
- К каждому паролю добавляется несколько случайных символов (их называют «соль») и результат хешируется. Полученный хеш вместе с «солью» сохраняются в открытом виде. Найти пароль с помощью таблиц таким методом не получится.
Существует несколько надстроек над MD5.
- MD5 (HMAC) — Keyed-Hashing for Message Authentication (хеширование с ключом для аутентификации сообщения) — алгоритм позволяет хешировать входное сообщение L с некоторым ключом K, такое хеширование позволяет аутентифицировать подпись.
- MD5 (Base64) — здесь полученный MD5-хеш кодируется алгоритмом Base64.
- MD5 (Unix) — алгоритм вызывает тысячу раз стандартный MD5, для усложнения процесса. Также известен как MD5crypt.
Для чего применяется MD5
Технология MD5 используется как один из криптографических методов, при помощи которого не только проверяются на целостность различные данные, но и:
- хранятся онлайн-ключи и пароли;
- создаются веб-идентификаторы и ЭЦП;
- выполняется поиск дублирующихся файлов и многое другое.
MD5 широко применяется при авторизации на различных сайтах. Вводимая пользователями информация считывается в виде отпечатков и хранится в базе данных сайта. Поэтому, даже если злоумышленник и похитит эту базу, он не сможет воспользоваться ею непосредственным образом. Все пароли зашифрованы и представлены дайджестами. Далее я расскажу о расшифровке файла MD5 онлайн сервисами.
Именно для того, чтобы избежать попадания в руки мошенников, многие данные в сети и передаются в зашифрованном виде. Информации присваивается MD5 = (случайное сочетание символов), например MD5 = 214d9a2575bb130ac5f19a8531e6e5f1. Этот набор символов (после “=”) называется “хэш MD5”, или контрольная сумма исчисляемый результат. Служит данный хэш для проверки передаваемых данных на целостность.
Как это происходит?
- При передаче массиву информации, целостность которого нужно проконтролировать, присваивается исходный хэш, исчисляемый при помощи алгоритма MD5;
- результат фиксируется;
- при регулярной или внеплановой проверке происходит сравнение полученной контрольной суммы с исходной;
- результаты совпадают – повода для беспокойства нет, если же они различаются, то это говорит о постороннем вмешательстве и изменении данных.
Файлы с хэш-кодом
Свойства хеша
Хэш-функция должна уметь преобразовывать информацию различной длины в код, состоящий из 32 шестнадцатеричных символов. Кроме этого, имеется несколько моментов, позволяющих обезопасить пользователя от постороннего вмешательства и изменения зашифрованной информации:
- если используются различные входные данные, то и результаты исчисления хэша должны заметно отличаться;
- алгоритм функции должен быть открыт для того, чтобы можно было исследовать ее на криптостойкость;
- шифрование хэша производится в одностороннем порядке, то есть никаким способом нельзя по результату вычислить исходную информацию.
Хэш-функция должна использовать минимальные вычислительные ресурсы.
Самостоятельное использование MD5
Здесь существует один интересный момент – при помощи данной функции каждый пользователь может самостоятельно проверить на целостность файл, скачанный из Интернета. Для этого нужно воспользоваться специальными сервисами, к примеру, HashTab implbits.com/products/hashtab. Утилита скачивается и встраивается в свойства файла в виде отдельной вкладки. С помощью HashTab можно воспользоваться несколькими алгоритмами хэширования данных, к тому же сервис находится в свободном доступе для пользователей, применяющих ее в личных целях.
HashTab в работе
Программы для вычисления различных хешей
Кроме перечисленных встроенных в Linux утилит, имеются другие программы, способные подсчитывать контрольные суммы. Часто они поддерживают сразу несколько алгоритмов хеширования, могут иметь дополнительные опции ввода и вывода (поддерживают различные форматы и кодировки), некоторые из них подготовлены для выполнения аудита файловой системы (выявления несанкционированных изменений в файлах).
Список некоторых популярных программ для вычисления хешей:
- hashrat
- hashdeep
- Hasher
- omnihash
Думаю, используя русскоязычную справку с примерами использования, вы без труда сможете разобраться в этих программах самостоятельно.
MD5 — пример хеширования
Python
import hashlib
hash_object = hashlib.md5(b’Hello World’)
print(hash_object.hexdigest())
1 |
importhashlib hash_object=hashlib.md5(b’Hello World’) print(hash_object.hexdigest()) |
Обратите внимание, что предшествует литералу строки, происходит конвертация строки в байты, оттого, что функция хеширования принимает только последовательность байтов в качестве параметра. В предыдущей версии библиотеки принимался литерал строки
Итак, если вам нужно принять какой-то ввод с консоли и хешировать его, не забудьте закодировать строку в последовательности байтов:
Python
import hashlib
mystring = input(‘Enter String to hash: ‘)
# Предположительно по умолчанию UTF-8
hash_object = hashlib.md5(mystring.encode())
print(hash_object.hexdigest())
1 |
importhashlib mystring=input(‘Enter String to hash: ‘) hash_object=hashlib.md5(mystring.encode()) print(hash_object.hexdigest()) |
Предположим, нам нужно хешировать строку с помощью функции . Тогда результатом будет .
Методы
Освобождает все ресурсы, используемые классом HashAlgorithm.Releases all resources used by the HashAlgorithm class. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданного массива байтов.Computes the hash value for the specified byte array. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданного объекта Stream.Computes the hash value for the specified Stream object. (Унаследовано от HashAlgorithm) |
|
(Унаследовано от HashAlgorithm) |
|
Создает экземпляр реализации по умолчанию хэш-алгоритма MD5.Creates an instance of the default implementation of the MD5 hash algorithm. |
|
Создает экземпляр заданной реализации хэш-алгоритма MD5.Creates an instance of the specified implementation of the MD5 hash algorithm. |
|
Освобождает все ресурсы, используемые текущим экземпляром класса HashAlgorithm.Releases all resources used by the current instance of the HashAlgorithm class. (Унаследовано от HashAlgorithm) |
|
Освобождает неуправляемые ресурсы, используемые объектом HashAlgorithm, а при необходимости освобождает также управляемые ресурсы.Releases the unmanaged resources used by the HashAlgorithm and optionally releases the managed resources. (Унаследовано от HashAlgorithm) |
|
Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object. (Унаследовано от Object) |
|
Служит в качестве хэш-функции по умолчанию.Serves as the default hash function. (Унаследовано от Object) |
|
Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance. (Унаследовано от Object) |
|
Если переопределено в производном классе, передает данные, записанные в объект, на вход хэш-алгоритма для вычисления хэша.When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash. (Унаследовано от HashAlgorithm) |
|
Передает записываемые в объект данные в хэш-алгоритм для вычисления хэша.Routes data written to the object into the hash algorithm for computing the hash. (Унаследовано от HashAlgorithm) |
|
Если переопределено в производном классе, завершает вычисление хэша после обработки последних данных криптографическим хэш-алгоритмом.When overridden in a derived class, finalizes the hash computation after the last data is processed by the cryptographic hash algorithm. (Унаследовано от HashAlgorithm) |
|
Сбрасывает хэш-алгоритм в исходное состояние.Resets the hash algorithm to its initial state. (Унаследовано от HashAlgorithm) |
|
Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object. (Унаследовано от Object) |
|
Возвращает строку, представляющую текущий объект.Returns a string that represents the current object. (Унаследовано от Object) |
|
Вычисляет хэш-значение для заданной области входного массива байтов и копирует указанную область входного массива байтов в заданную область выходного массива байтов.Computes the hash value for the specified region of the input byte array and copies the specified region of the input byte array to the specified region of the output byte array. (Унаследовано от HashAlgorithm) |
|
Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array. (Унаследовано от HashAlgorithm) |
|
Пытается вычислить хэш-значение для заданного массива байтов.Attempts to compute the hash value for the specified byte array. (Унаследовано от HashAlgorithm) |
|
Пытается завершить вычисление хэша после обработки последних данных хэш-алгоритмом.Attempts to finalize the hash computation after the last data is processed by the hash algorithm. (Унаследовано от HashAlgorithm) |
Алгоритм MD5 Править
На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и не отрицательное. Кратность каким-либо числам не обязательна. После поступления даных идет процесс подготовки потока к вычислениям.
Ниже приведены 5 шагов алгоритма:
Шаг 1. Выравнивание потока Править
Входные данные выравниваются так, чтобы их размер был сравним с 448 по модулю 512 (L’ = 512 × N + 448). Сначала дописывают единичный бит в конец потока, затем необходимое число нулевых бит (выравнивание происходит, даже если длина уже конгруэнтна — сравнима с 448).
Шаг 2. Добавление длины сообщения Править
В оставшиеся 64 бита дописывают 64-битное представление длины данных до выравнивания. Если длина превосходит $ 2^{64}-1 $, то дописывают только младшие биты. После этого длина потока станет кратной степеням двойки — 16, 32. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.
Шаг 3. Инициализация буфера Править
Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами:
А = 01 23 45 67; В = 89 AB CD EF; С = FE DC BA 98; D = 76 54 32 10.
В этих переменных будут храниться результаты промежуточных вычислений. Начальное состояние ABCD называется инициализирующим вектором.
Определим еще функции и константы, которые нам понадобятся для вычислений.
Потребуются 4 функции для четырех раундов. Введем функции от трех параметров — слов, результатом также будет слово.
- 1 раунд $ Fun F(X,Y,Z) = (X\wedge{Y}) \vee (\neg{X} \wedge{Z}) $.
- 2 раунд $ Fun G(X,Y,Z) = (X\wedge{Z}) \vee (\neg{Z} \wedge{Y}) $.
- 3 раунд $ Fun H(X,Y,Z) = X \oplus Y \oplus Z $.
- 4 раунд $ Fun I(X,Y,Z) = Y \oplus (\neg{Z} \vee X) $.
- Определим таблицу констант T — 64-элементная таблица данных, построенная следующим образом: $ T=int(4294967296*|sin(i)|) $ и s — циклический сдвиг влево на s бит полученого 32-битного аргумента.
- Выравненные данные разбиваются на блоки (слова) по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: , определяемый как $ a = b + ((a + Fun(b, c, d) + X + T) <<< s) $, где X — блок данных. X = M , где k — номер 32-битного слова из n-го 512-битного блока сообщения.
Шаг 4. Вычисление в цикле Править
Заносим в блок данных элемент n из массива. Сохраняются значения A, B, C и D, оставшиеся после операций над предыдущими блоками (или их начальные значения, если блок первый).
- AA = A
- BB = B
- CC = C
- DD = D
Раунд 1
/* a = b + ((a + F(b,c,d) + X + T) <<< s). */
Раунд 2
/* a = b + ((a + G(b,c,d) + X + T) <<< s). */
Раунд 3
/* a = b + ((a + H(b,c,d) + X + T) <<< s). */
Раунд 4
/* a = b + ((a + I(b,c,d) + X + T) <<< s). */
Суммируем с результатом предыдущего цикла:
A = AA + A B = BB + B C = CC + C D = DD + D
После окончания цикла необходимо проверить, есть ли еще блоки для вычислений. Если да, то изменяем номер элемента массива (n++) и переходим в начало цикла.
Шаг 5. Результат вычислений Править
Результат вычислений находится в буфере ABCD, это и есть хеш. Если вывести слова в обратном порядке DCBA, то мы получим наш 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 сек | 37359 Кб/сек | 2,574 сек | 37940 Кб/сек |
OpenSSL | 1,152 сек | 84771 Кб/сек | 0,891 сек | 109603 Кб/сек |
Протокол
Протокол CRAM-MD5 включает в себя один цикл вызов-ответ и инициируется сервером:
- Запрос: В аутентификации CRAM-MD5 сервер первый посылает строку запроса клиенту.
- Ответ: Клиент отвечает строкой, созданной следующим образом.
- Запрос был послан как строка, закодированная в base64, которая декодируется.
- Декодированный запрос зашифрован HMAC-MD5 паролем пользователя в качестве секретного ключа.
- Зашифрованный запрос преобразовывается в строку шестнадцатеричных цифр.
- Имя пользователя и пробельный символ присоединяются спереди к шестнадцатеричным цифрам.
- Результат объединения затем кодируется base64 и посылается серверу.
- Сравнение: Сервер использует тот же метод для вычисления ожидаемого ответа. Если полученный ответ и ожидаемый ответ совпадают, то аутентификация пройдена успешно.
Как рассчитать хеш (контрольную сумму)
В Linux имеются программы для расчёта и сверки популярных хешей:
- b2sum – вычисляет и проверяет криптографическую хеш-функцию BLAKE2 (512-бит)
- cksum – печатает контрольную сумму CRC и количество байт
- md5sum – печатает или проверяет контрольную сумму MD5 (128-бит)
- sha1sum – печатает или проверяет контрольную сумму SHA1 (160-бит)
- sha224sum – печатает или проверяет контрольную сумму SHA224 (224- бит)
- sha256sum – печатает или проверяет контрольную сумму SHA256 (256- бит)
- sha384sum – печатает или проверяет контрольную сумму SHA384 (384- бит)
- sha512sum – печатает или проверяет контрольную сумму SHA512 (512- бит)
Информация о SHA-2 (безопасный алгоритм хеширования, версия 2) – семействе криптографических алгоритмов (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224.): https://ru.wikipedia.org/wiki/SHA-2
Все эти программы установлены по умолчанию в большинстве дистрибутивов Linux, они позволяют рассчитать хеши для файлов или для строк.
Применение всех этих программ похожее – нужно указать имя файла, либо передать по стандартному вводу строку.
Если для расчёта хеша строки вы используете echo, то крайне важно указывать опцию -n, которая предотвращает добавление символа новой строки – иначе каждый хеш для строки будет неверным!
Пример подсчёта хеша SHA1 для строки test:
echo -n 'test' | sha1sum a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 -
Ещё один способ передачи строки без добавления конечного символа newline
printf '%s' 'test' | md5sum
Как можно заметить, после хеша следует пробел и имя файла (в случае стандартного ввода – указывается тире), чтобы показать только хеш, можно использовать к команде добавить | awk ‘{print $1}’ или | cut -d» » -f1:
echo -n 'test' | sha1sum | awk '{print $1}'
Этот же результат можно получить следующей конструкцией:
echo -n 'test' | sha1sum | cut -d" " -f1
Как расшифровать MD5 в режиме онлайн
Произвольный массив информации преобразуется в “дайджест” или “отпечаток” определенной длины. В дальнейшем при проверке файла полученный код сравнивается с исходным отпечатком и делается вывод о целостности данных. В общем понятии расшифровать хэш-код невозможно, так как он и был создан для того, чтобы его нельзя было взломать. Обычные методы раскодировки в данном случае не срабатывают, потому что информация представлена несколько по-иному. Поэтому, хотя это и сложновато, остается попробовать подобрать искомую информацию, в чем нам могут помочь специальные сервисы и программы.
Раскодировка MD5 онлайн
Расшифровка в сервисе MD5 Decrypter
В специальное поле вводим хэш-код, который нам нужно расшифровать, значения капчи и нажимаем расшифровать (“Decrypt!”, если не произошел перевод сайта на русский язык). Внизу будут результаты: MD5-хэш и его раскодировка, либо информация о том, что расшифровка отсутствует в базе данных.
Также можно воспользоваться онлайн инструментом MSurf. Данный сервис позволяет как закодировать сведения при помощи MD5, так и расшифровать хэш-код.
Закодировать и раскодировать информацию на сайте MSurf.ru
Стоит отметить, что функция MD5 устаревает. Злоумышленники получают доступ к базам данных и с определенной долей вероятности – к зашифрованной информации. Поэтому вследствие относительной ненадежности разработчикам ПО рекомендуется пользоваться MD5 либо в комплексе с другими алгоритмами, либо постепенно заменить его на более современный SHA.