Вычисление хэш-сумм MD, SHA при помощи CAPICOM

Вычисление хэш-суммы по алгоритму SHA-512
Вычисление хэш-суммы по алгоритму MD5
Вычисление хэш-суммы по алгоритму ГОСТ Р 34.11-94

Установка CAPICOM


Компания Microsoft не советует использовать библиотеку CAPICOM, но без её COM-объектов обойтись трудно. Первым делом необходимо скачать Platform SDK CAPICOM. Этот пакет содержит свободно распространяемые файлы компоненты CAPICOM 2.1.0.1 и примеры её использования. CAPICOM можно использовать для электронной подписи данных и её проверки, хэширования данных, шифрования и расшифровки данных и т.д. После запуска скачанного пакета мастер установки произведет копирование файлов компоненты в указанную папку. В папке ...\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86 находится файл CAPICOM.dll который нужно зарегистрировать в системе, для этого запустите командную строку от имени администратор и выполните команду regsvr32 CAPICOM.dll:
Регистрация библиотеки CAPICOM
На этом установка закончена, можно приступать к использованию COM-объектов библиотеки CAPICOM в конфигурации :)

Реализация вычисления хэш-суммы


После регистрации библиотеки capicom.dll становится доступен COM-объект HashedData, у которого ProgID = CAPICOM.HashedData.1. Этот объект имеет метод Hash, в который будем передавать строку, и два свойства. Через свойство Algorithm указываем алгоритм вычисления хэш-суммы, а через свойство Value будем получать результат вызова метода Hash. Перед передачей строки в метод Hash производим приведение строки к кодировке UTF-8.

Список поддерживаемых алгоритмов и их значения (Algorithm):
  • SHA1 - CAPICOM_HASH_ALGORITHM_SHA1 (0);
  • MD2 - CAPICOM_HASH_ALGORITHM_MD2 (1);
  • MD4 - CAPICOM_HASH_ALGORITHM_MD4 (2);
  • MD5 - CAPICOM_HASH_ALGORITHM_MD5 (3);
  • SHA-256 - CAPICOM_HASH_ALGORITHM_SHA_256 (4);
  • SHA-384 - CAPICOM_HASH_ALGORITHM_SHA_384 (5);
  • SHA-512 - CAPICOM_HASH_ALGORITHM_SHA_512 (6).
Функция вычисления хэш-суммы на языке 1С:
// Функция вычисляет хэш-сумму по алгоритмам SHA и MD.
//
// Параметры
//  Строка  - Строка - исходная строка;
// Алгоритм - Число - алгоритм, по которому вычисляется хэш-сумма.
//
// Возвращаемое значение:
//   Строка   - хэш-сумма в виде N-символьной строке в шестнадцатеричном формате.
//
&НаСервереБезКонтекста
Функция ВычислитьХэшСумму(Строка, Алгоритм) Экспорт

HashedData = Новый COMОбъект("CAPICOM.HashedData.1");
// Указываем алгоритм хэширования.
HashedData.Algorithm = Алгоритм;
// Передаем данные, строку кодируем в последовательность байтов UTF-8.
UTF8Encoding = Новый COMОбъект("System.Text.UTF8Encoding");
HashedData.Hash(UTF8Encoding.GetBytes_4(Строка));

// Возвращаем вычисленную хэш-сумму.
Возврат HashedData.Value;

КонецФункции // ВычислитьХэшСумму()


Результат работы функции:
Хэш-сумма по алгоритму MD5 от значения 123
Хэш-сумма представляется в видет N-символьной строки в шестнадцатеричном виде.
Обработку можно скачать по этой ссылке.

Минус данной реализации таков: Microsoft  уходит от поддержки библиотеки CAPICOM и требуется установка данной библиотеки (если код будет выполняться на сервере, то у становка требуется только на машине, где установлен сервер 1С:Предприятие)

Комментарии

  1. При применении в 1с77, "неправильно" считает хеш сумму. Или не преобразовывает автоматически хешируемую строку в utf-8 кодировку

    ОтветитьУдалить

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