MD5 в 1С

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

Средства платформы

В версии платформы 8.3 наконец-то был реализован штатный механизм хеширования данных, который позволяет хешировать строки и файлы при помощи алгоритмов MD5, SHA1, SHA256 и CRC32.

Делается это просто:

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

Объект CAPICOM.HashedData

Код для строки:

Код для файла:

К плюсам данного способа следует отнести простоту, элегантность и универсальность — свойство Algorithm может принимать следующие значения:

  • 0 — SHA1;
  • 1 — MD2;
  • 2 — MD4;
  • 3 — MD5;
  • 4 — SHA-256;
  • 5 — SHA-384;
  • 6 — SHA-512.

Но у этого способа есть один очень серьезный минус — библиотека CAPICOM.HashedData присутствует только в Windows не старше Vista/Server 2008.

Объект MD5CryptoServiceProvider

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

Код для получения хеша строки выглядит так:

Для получения хеша файла — так:

В обоих примерах MD5CryptoServiceProvider можно заменить на SHA1Managed, SHA256Managed, SHA384Managed или SHA512Managed изменив тем самым метод хеширования.

Объект MSScriptControl.ScriptControl

Ну и наконец, рассмотрим последний, в моем списке, способ основан на реализации MD5 в JavaScript, минусом этого способа являются его недоступность на 64-х битном сервере 1С, а также немалый объем кода. Сам код этого способа я приводить не буду, по уже упомянутой причине объема кода, функция доступна в текстовом файле.

На этом все, надеюсь эта статья Вам помогла.

5 комментариев к “MD5 в 1С

  1. Полезная статья, спасибо.
    На основе это статьи я написал универсальную функция MD5.

    Функция УниверсалнаяMD5СуммаСтроки(СтрокаДляХеширования)
    Результат = «»;
    СисИнфо = Новый СистемнаяИнформация;
    Версия1С = Число(Лев(СисИнфо.ВерсияПриложения,3));
    ВерсияWindows = Число(Лев(СтрЗаменить(СтрЗаменить(СисИнфо.ВерсияОС, «version», «»),» «,»»),3));
    Windows7 = 6.1; // Список версий Windows — https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx

    Если Версия1С >= 8.3 Тогда
    Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
    Хеш.Добавить(СтрокаДляХеширования);
    Результат = Хеш.ХешСумма;
    Иначе
    Если ВерсияWindows < Windows7 Тогда
    Crypt = Новый COMОбъект("CAPICOM.HashedData");
    Crypt.Algorithm = 3;
    Crypt.Hash(СтрокаДляХеширования);
    Результат = Crypt.Value;
    Иначе
    Crypt = Новый COMОбъект("System.Security.Cryptography.MD5CryptoServiceProvider");
    Text = Новый COMОбъект("System.Text.UTF8Encoding");
    HashArray = Crypt.ComputeHash_2(Text.GetBytes_4(СтрокаДляХеширования)).Выгрузить();
    Для Каждого Число Из HashArray Цикл
    Результат = Результат + DecToHex(Число);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;

    Результат = НРег(СтрЗаменить(Результат, " ",""));

    Возврат Результат;
    КонецФункции // УниверсалнаяMD5СуммаСтроки

  2. Pingback: MD5 в 1С — 1С и HTML5
  3. Функция DecToHex(Знач _Число)
    База = 16;
    Результат = «»;
    Пока _Число 0 Цикл
    Поз =_Число % База;
    Результат = Сред(«0123456789ABCDEF», Поз + 1, 1) + Результат;
    _Число = Цел(_Число / База);
    КонецЦикла;
    Возврат Результат;
    КонецФункции // DecToHex()

Оставить комментарий