ХЭШ функция МД5 (MD5)

31.10.11

Разработка - Защита ПО и шифрование

MD5 (англ. Message Digest 5) — 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины и последующей проверки их подлинности. Является улучшенной в плане безопасности версией MD4.[1]

Скачать файлы

Наименование Файл Версия Размер
МЛ5
.epf 9,97Kb
298
.epf 9,97Kb 298 Скачать

 

Алгоритм MD5

Схема работы алгоритма MD5

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.

Ниже приведены 5 шагов алгоритма:

[править]Шаг 1. Выравнивание потока

Сначала дописывают единичный бит в конец потока(байт 0x80), затем необходимое число нулевых бит. Входные данные выравниваются так, чтобы их новый размер L' был сравним с 448 по модулю 512 (L’ = 512 × N + 448). Выравнивание происходит, даже если длина уже сравнима с 448.

[править]Шаг 2. Добавление длины сообщения

В оставшиеся 64 бита дописывают 64-битное представление длины данных (количество бит в сообщении) до выравнивания. Сначала записывают младшие 4 байта. Если длина превосходит 264 − 1, то дописывают только младшие биты. После этого длина потока станет кратной 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 раунд Fun F(X,Y,Z) = (Xwedge{Y}) vee (neg{X} wedge{Z}).
2 раунд Fun G(X,Y,Z) = (Xwedge{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[1..64] — 64-элементная таблица данных, построенная следующим образом: T[i] = int(4294967296 * | sin(i) | ), где 4294967296 = 232.[3]
  • Выровненные данные разбиваются на блоки (слова) по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: [abcd k s i], определяемый как a = b + ((a + Fun(b,c,d) + X[k] + T[i]) < < < s), где X — блок данных. X[k] = M [n * 16 + k], где k — номер 32-битного слова из n-го 512-битного блока сообщения, и s — циклический сдвиг влево на s бит полученого 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 хеш.

[править]

 

См. также

Запрет глобального поиска в конфигурации

Защита ПО и шифрование Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

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

1 стартмани

09.02.2023    2223    9    aximo    4    

2

Как защитить pdf файл

Защита ПО и шифрование Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    1657    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    2983    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

Защита ПО и шифрование Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    3829    7    vit59    2    

6

Обфускатор байт-кода

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

10 стартмани

16.06.2022    10293    79    ZhokhovM    12    

40

Как уберечь конструкторскую документацию от воровства конкурентами?

Защита ПО и шифрование Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

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

2 стартмани

09.03.2022    5654    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    4556    2    idm80    11    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4670 31.10.11 14:12 Сейчас в теме
(0) И что? Копи-пастить из педивикии я тоже умею.
2. OlesyaBelochka 39 31.10.11 15:17 Сейчас в теме
Молодец, тут же дело не в описании, а в том что обработка преобразует обычную строку в ХЭШ строку МД5. На инфорстаре подобного я не нашла.
3. cool.vlad4 2 31.10.11 15:33 Сейчас в теме
(2) Есть на инфостарте(и не только на нем), опять поиск на ИС-е работает не очень
4. cool.vlad4 2 31.10.11 15:40 Сейчас в теме
Нашел это ...
http://infostart.ru/public/82506/
http://forum.infostart.ru/forum24/topic38820/
я думаю ничего страшного, если будет и (0) .
5. Re:аниматор 338 31.10.11 15:49 Сейчас в теме
На проклабе есть для 7.7 мд5. судя по коду это и есть 7.7 переведенная под 8 ку, все функции, методы и комментарии совпадают
6. mark-simf 31.10.11 22:43 Сейчас в теме
Поддерживаю замечание от аниматора:

Цитирую - "На проклабе есть для 7.7 мд5. судя по коду это и есть 7.7 переведенная под 8 ку, все функции, методы и комментарии совпадают"
9. Re:аниматор 338 01.11.11 11:51 Сейчас в теме
(6) не "аниматор", а "Re:аниматор" = "Реаниматор"
7. mark-simf 31.10.11 22:43 Сейчас в теме
А вообще таких примочек полно в инете
8. mark-simf 31.10.11 22:44 Сейчас в теме
У меня тоже есть своя наработка, правда что-то не получается ее тут разместить(((((((((
10. dimanich70 571 06.11.11 12:13 Сейчас в теме
Можно поподробнее, как на практике применить и где (1С интересует)?
11. fonomo0 08.12.11 12:43 Сейчас в теме
Присоединяюсь к последнему комментатору. Где использовать?
12. stark.temp 19.01.12 12:02 Сейчас в теме
13. OlesyaBelochka 39 24.01.12 17:49 Сейчас в теме
Спасибо за +.. я на практике применяла для следующего случая.. Обмен с сервером статистики для начисления бонусов покупки, если ты используешь бонусную карту.. Т.е при продаже формируется запрос на сервер. В этом запросе для авторизации передаются логин и пароль кассира, который осуществил продажу.. Так вот для того чтобы не так просто было определить пароль разработчики этой учетной системы придумали что сервер должен получать пароль пользователя в виде ХЭШ функции, он его расшифровывает, и проверяет на правильность..соответственно если пароль введен неправильно то бонусы не начисляются. Да я видела на этом сайте различные обработки... Но они почему-то оказались нерабочими..А эта 100% работает правильно!
14. Red1 23 24.01.12 18:01 Сейчас в теме
А что мешало найти реализацию МД5 на ява скрипте, и через объект создавать скрипт в 1С, потом передавать туда параметр, а по а получать уже ХЭШ функцию.
Я просто когда надо сделать что-то такое, понял что на 1С фиг что найдешь, а на других языках этого полно. Тот же генератор случайных чисел например.
15. alex_bob 246 27.01.12 09:03 Сейчас в теме
Спасибо за почти пригодное для меня решение. Однако хочу предупредить, что для паролей, содержащих символы на русском языке, программа будет давать xэш, отличающийся от кода, который давал вариант на 1С77. Это связано с тем, что в 1С8 применяется кодировка UTF, а в 1С77 ANSI и функция КодСимвола() работает по-разному. В частности это касается хэшей паролей пользователей 1С77, которые хранятся в файле USERS.USR
16. restuta 21.02.12 08:35 Сейчас в теме
Где использовать обывателю?
18. b1waver 30.05.12 10:57 Сейчас в теме
(16) restuta, для идентификации объектов при интеграции 1С с другими системами, например.
17. Gandalf Белый 29.04.12 17:34 Сейчас в теме
Да, поддерживаю вопрос, где это можно использовать?
19. Altair777 644 24.07.12 14:25 Сейчас в теме
(17) maksim.s,

У меня была небольшая подсистема для принудительной смены пароля в 1С8 через определенное время.
И планировалось не разрешать устанавливать уже существующий. Но хранить ранее введенные пароли в открытом виде не есть хорошо. :)
И как раз для таких случаев можно использовать шифрование.
20. 7fortune 04.08.12 01:09 Сейчас в теме
что-то не правильный хэш выдает эта обработка? никто ее в деле не пробовал? или я что не так делаю?
21. 7fortune 04.08.12 01:44 Сейчас в теме
Заработало!)там в реквизите пароль - длина 50 была, а у меня тестовая строчка больше размером была!Длину строки в реквизите увеличил и все заработало правильно! Спасибо автору за разработку!
22. wing 27 28.02.13 10:32 Сейчас в теме
Не работает обработка :(
Ввожу в нее строку, затем меняю символ, а хеш остается тем же ... понятно, что с символом, который не влияет на хеш надо угадать, но факт остается фактом - хеш не уникален для строки ...
23. theshadowco 238 06.05.13 18:27 Сейчас в теме
(22) wing, вот не замысловатый код
Функция MD5Eng(КодируемаяСтрока)Экспорт

	оMD5 = Новый COMОбъект("System.Security.Cryptography.MD5CryptoServiceProvider");
	оEnc = Новый COMОбъект("System.Text.UTF8Encoding");
	оStr = Новый COMОбъект("System.Text.StringBuilder");

	// переводим в байтовый массив 
	Массив = оEnc.GetBytes_4(КодируемаяСтрока);
	
	// MD5
	Массив = оMD5.ComputeHash_2(Массив);
	
	// переведем обратно из байтового массива в строку
	КолЭлементовМассива = Массив.GetLength();
	Для Ит = 0 ПО КолЭлементовМассива - 1 Цикл 
	
		оStr.AppendFormat("{0:x02}", Массив.GetValue(Ит));
	
	КонецЦикла;
	
	оMD5 = NULL;
	оEnc = NULL;
	
	Возврат оStr.ToString();
	
КонецФункции // MD5Eng()

Показать
maxchaos; Goggy; rayastar; IrinaBelVlad; NewLifeMan; bajen; vet7777; MherArsh; dgolovanov; Arvend; Жолтокнижниг; molodoi1sneg; jurgal1C; Dimon93dimon; Alex_Smolensky; OVladius; foka_1s; Andrey_ezhi; 1Cynep4eJIoBek; soci0pat; +20 Ответить
25. wing 27 15.07.13 04:58 Сейчас в теме
(23) За пример со StringBuilder большое спасибо. Кодировку MD5 уже с год пользую именно таким способом, но числа в строку кодировал циклом на языке 1С (поиск в строке от 0 до f).

Только одна неточность: ToString - это не метод, а свойство, а значит скобки лесом.
26. Andrey_ezhi 20.02.14 16:31 Сейчас в теме
(23)Спасибо, очень помогло! Для POST запроса надо было кодировать пароль по правилу md5(дата&пароль)
27. ture 606 14.07.15 15:03 Сейчас в теме
(23) theshadowco, ты эту суёшь везде. Ну так знай, что на win2012 и выше это не работает.
28. Поручик 4670 15.07.15 09:52 Сейчас в теме
(27) Проснулся или из погреба выполз? Пост двухлетней давности.
29. theshadowco 238 10.08.15 18:57 Сейчас в теме
(27) ture,
Во-первых "тыкать" неприлично, я с вами даже не знаком.
Во-вторых я данный метод на 8.1-8.2 использую много лет, включая и последние версии ОС от MS. Может поделитесь описанием ошибки из-за которой вы решили, что метод на данный момент использовать не стоит?
32. Goggy 1 15.04.21 09:21 Сейчас в теме
(29) Поручик, просто расслабился и пукнул. Вы сильно не обижайтесь. Подрастёт и Наташа Ростова его воспитает.
24. slavik27 88 20.06.13 07:46 Сейчас в теме
спасибо очень интересно, попробую
30. МихаилМ 10.08.15 23:39 Сейчас в теме
начиная с версии 1с8 3.5.. реализована поддержка MD5

http://1c-programmer-blog.ru/programmirovanie/md5-v-1s.html
simuljakr; +1 Ответить
31. theshadowco 238 11.08.15 06:19 Сейчас в теме
(30) МихаилМ, для 8.3 все понятно и известно (при том не в 8.3.5, а ранее).
33. dctvghbdtn 27.09.21 22:24 Сейчас в теме
Добрый день.
Не могли бы поделиться данной обработкой? Очень нужно для академических целей. СМ не хватает к сожалению. Спасибо.
Оставьте свое сообщение