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С, а также немалый объем кода. Сам код этого способа я приводить не буду, по уже упомянутой причине объема кода, функция доступна в текстовом файле.

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

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 4, средняя оценка: 5,00 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 10
  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СуммаСтроки

    1. тимур

      Не будет работать на Linux серверах

    2. тимур

      И у вас не указано определение функции DecToHex()

  2. артур

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

  3. dimrad

    Хорошая статья, спасибо автору.
    Есть небольшая поправка к функции DecToHex(), выдает ошибку для байта 0

    2715b129922241c6d721eba6571f00a9 — правильно
    2715b129922241c6d721eba6571f0a9 — не правильно, байт == 0х00 —> «0»

    Функция DecToHex(Знач тЧисло)

    НачальноеЧисло = тЧисло;
    тБаза = 16;

    Если тЧисло = 0 Тогда
    Возврат «00»;

    Иначе
    Пока тЧисло 0 Цикл
    тПоз = тЧисло % тБаза;
    Результат = Сред(«0123456789abcdef», тПоз + 1, 1) + Результат;
    тЧисло = Цел(тЧисло / тБаза);
    КонецЦикла;

    Если НачальноеЧисло < тБаза Тогда
    Результат = "0" + Результат;
    КонецЕсли;

    Возврат Результат;

    КонецЕсли;

    КонецФункции

  4. WeldonCow

    отрадный ресурс брекеты томск

  5. DeweyFourn

    В сети магазинов «Формула времени» имеются коллекции часов узнаваемых элитных брендов. Вы можете приобрести наручные часы в интернет магазине, или посетить один из наших салонов в Москве — Магазин Русские часы. На страничках каталога, а также на витрине магазина для вас представлены десятки предложений в различных стилевых решениях: от изящной благородной классики и спортивной, функциональной динамичности до оригинальных casual моделей и сдержанных трехстрелочников. В каждой коллекции четко прослеживается стремление к безупречности деталей и нетривиальной роскоши.

  6. Kelvinhob

    Доставка роллов в Сарапуле

  7. DavidteN

    Поэтому например важно вовремя вакцинировать вашего щенка, чтобы он вырос здоровым… итать полностью]

    Вы можете искать по названию организации, услуге, метро, району вдобавок другим ключевым словам…

    «Ветеринарная помощь Темрюк», ветеринарный кабинет Краснодарский земля

    Проблема состоит в том, что ваши питомцы не могут вам об этом сказать или заняться лечением самостоятельно… итать полностью]

    Ветеринарный кабинет, ИП Рублева Н.В. Краснодарский край
    ветклиника репина
    Вы можете искать по названию организации, услуге, метро, району вдобавок другим ключевым словам…

    Доктора всечасно повышают свой профессиональный уровень чтобы…

    Профессионально!!! Очень доволен результатом работы грумеров,т.

    Ветеринарная клиника «Элвет» — надежный помощник для владельцев домашних животных.

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

    Наложение швов на кожно-мышечные раны (без учета материала)

    Удаление секрета паранальных желез с промыванием (введение лекарственных препаратов без учета их стоимости)

    Ультразвуковое исследование м/п системы, определение беременности

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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: