Шифрование строковых данных. Менеджер криптографии.
Просмотр криптопровайдеров ОС Windows. Инициализация менеджера криптографии.
Шифрование строковых данных с помощью CAPICOM.EnvelopedData
Шифрование строковых данных с помощью CAPICOM.EncryptedData
Шифрование - обратимое преобразование некой информации с целью сокрытия от неавторизованных лиц и, в это же время, предоставление, авторизованным пользователям доступа к ней. Главная задача шифрования - это соблюдение конфиденциальности передаваемой информации.
Методы шифрования:
Для использования шифрования необходимо иметь сертификат. Создание сертификата описано в статье Создание временного сертификата для использования во время разработки. Сертификат необходимо создавать с параметром -sky exchange, иначе расшифрование сообщения будет завершаться ошибкой "Модуль криптографии не поддерживает установку пароля к закрытому ключу".
Так же желательно создавать сертификат с параметром -sp, который позволит задать имя криптопровайдера для сертификата, например, "Microsoft Strong Cryptographic Provider", так как для инициализации объекта МенеджерКриптографии требуется в конструкторе указывать имя криптопровайдера (имя модуля провайдера).
Пример создания временного сертификата для тестирования шифрования в 1С:
makecert.exe -r -pe -n CN="www.example.com" -ss my -sr currentuser
-sky exchange -sp "Microsoft Strong Cryptographic Provider"
Внимание: пароль на контейнер закрытого ключа при создании сертификата в данном случае не устанавливается!
Функция шифрования строковых данных:
В данной функции строковые данные записываются в файл в кодировке CESU-8, т.е. UTF-8 без BOM. Инициализируется менеджер криптографии и по отпечатку происходит поиск сертификата в хранилище сертификатов текущего пользователя в ветке Личное.
Далее происходит шифрование строковых данных, используя найденный сертификат, тем самым, расшифрование сможет произвести тот пользователь, который имеет доступ к закрытому ключу этого сертификата. Результатом шифрования являются двоичные данные, которые кодируются в строку Base64. Двоичные данные имеют формат PKCS#7.
Функция расшифрования строковых данных:
В данной функции инициализируется менеджер криптографии и указывается пароль к контейнеру закрытого ключа. Далее происходит расшифровка зашифрованных данных. Результатом расшифрования являются двоичные данные, которые записываются в файл с кодировкой CESU-8 и считываются из него.
Скачать обработку шифрования/расшифрования строковых данных можно по этой ссылке.
Пример работы обработки:
На рисунке 4 поле "Пароль" пустое, так как при создании временного сертификата мы не указывали пароль на контейнер закрытого ключа.
Шифрование строковых данных с помощью CAPICOM.EnvelopedData
Шифрование строковых данных с помощью CAPICOM.EncryptedData
Шифрование - обратимое преобразование некой информации с целью сокрытия от неавторизованных лиц и, в это же время, предоставление, авторизованным пользователям доступа к ней. Главная задача шифрования - это соблюдение конфиденциальности передаваемой информации.
Методы шифрования:
- Симметричное шифрование - использует один и тот же ключ и для зашифрования, и для расшифрования;
- Асимметричное шифрование - использует два разных ключа: один для зашифрования (который также называется открытым), другой для расшифрования (называется закрытым).
Создание временного сертификата
Для использования шифрования необходимо иметь сертификат. Создание сертификата описано в статье Создание временного сертификата для использования во время разработки. Сертификат необходимо создавать с параметром -sky exchange, иначе расшифрование сообщения будет завершаться ошибкой "Модуль криптографии не поддерживает установку пароля к закрытому ключу".
![]() |
1. Ошибка установки пароля к закрытому ключу |
Пример создания временного сертификата для тестирования шифрования в 1С:
makecert.exe -r -pe -n CN="www.example.com" -ss my -sr currentuser
-sky exchange -sp "Microsoft Strong Cryptographic Provider"
![]() |
2. Создание временного сертификата |
Реализация шифрования
Функция шифрования строковых данных:
// Функция выполняет шифрование строковых данных.
//
// Параметры
// СтроковыеДанные - Строка - данные для шифрования;
// Отпечаток - Строка - отпечаток сертификата закодированный в Base64;
// ИмяКП - Строка - имя модкля криптографии;
// ТипКП - Строка - Тип модуля криптографии.
//
// Возвращаемое значение:
// Строка - зашифрованный данные формата PKCS#7 закодированные в Base64.
//
&НаКлиенте
Функция ЗашифроватьСтроку(СтроковыеДанные, Отпечаток, ИмяКП, ТипКП)
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, "CESU-8");
ЗаписьТекста.Записать(СтроковыеДанные);
ЗаписьТекста.Закрыть();
МенеджерКриптографии = Новый МенеджерКриптографии(ИмяКП, "", ТипКП);
ХранилищеСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(
ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты,
РасположениеХранилищаСертификатовКриптографии.ДанныеПользователяОС);
Сертификат = ХранилищеСертификатов.НайтиПоОтпечатку(Base64Значение(Отпечаток));
ЗашифрованныеДанные = МенеджерКриптографии.Зашифровать(ИмяВременногоФайла, Сертификат);
УдалитьФайлы(ИмяВременногоФайла);
Возврат Base64Строка(ЗашифрованныеДанные);
КонецФункции // ЗашифроватьСтроку()
В данной функции строковые данные записываются в файл в кодировке CESU-8, т.е. UTF-8 без BOM. Инициализируется менеджер криптографии и по отпечатку происходит поиск сертификата в хранилище сертификатов текущего пользователя в ветке Личное.
![]() |
3. Личные сертификаты текущего пользователя |
Функция расшифрования строковых данных:
// Функция выполняет расшифровку строковых данных.
//
// Параметры
// ЗашифрованныеДанные - Строка - зашифрованный данные формата PKCS#7 закодированные в Base64;
// Отпечаток - Строка - отпечаток сертификата закодированный в Base64;
// ПарольЗакрытогоКлюча - Строка - пароль к контейнеру закрытого ключа;
// ИмяКП - Строка - имя модкля криптографии;
// ТипКП - Строка - Тип модуля криптографии.
//
// Возвращаемое значение:
// Строка - расшифрованные строковые данные.
//
&НаКлиенте
Функция РасшифроватьСтроку(ЗашифрованныеДанные, Отпечаток, ПарольЗакрытогоКлюча, ИмяКП, ТипКП)
МенеджерКриптографии = Новый МенеджерКриптографии(ИмяКП, "", ТипКП);
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = ПарольЗакрытогоКлюча;
РасшифрованныеДанные = МенеджерКриптографии.Расшифровать(Base64Значение(ЗашифрованныеДанные));
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
РасшифрованныеДанные.Записать(ИмяВременногоФайла);
ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла, "CESU-8");
СтрокаДанных = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
УдалитьФайлы(ИмяВременногоФайла);
Возврат СтрокаДанных;
КонецФункции // РасшифроватьСтроку()
В данной функции инициализируется менеджер криптографии и указывается пароль к контейнеру закрытого ключа. Далее происходит расшифровка зашифрованных данных. Результатом расшифрования являются двоичные данные, которые записываются в файл с кодировкой CESU-8 и считываются из него.
Скачать обработку шифрования/расшифрования строковых данных можно по этой ссылке.
Пример работы обработки:
![]() |
4. Шифрование и расшифрование сообщения |
Добра!
ОтветитьУдалитьА можете сделать что то подобное на заказ?
Добра! Нет, большая загрузка на работе!
УдалитьПочему пароль на закрытый ключ не устанавливается?
ОтветитьУдалить