"Оцифровка" бизнес-процессов.

   
     +7 (910) 778-05-31, romanb@nxt.ru
Коснитесь для звонка

Пример ассиметричного шифрования(RSA) 1С:Предприятие 8

Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".

Обработка является примером работы с RSA из 1С:Предприятие и выполняет для примера шифрование и расшифрование текста.

Ниже представлены использовавшиеся методы.

Скачать обработку можно по ссылке внизу страницы.

 
 //**************************************************************************************
Функция СтрокаВДвоичныйВид(ВходнаяСтрока) Экспорт

	Поток = Новый COMОбъект("ADODB.Stream");
	Поток.Open();
	Поток.Type = 2;
	Поток.Charset = "utf-8";
	Поток.WriteText(ВходнаяСтрока);

	Поток.Position = 0;
	Поток.Type = 1;

	ДвоичныеДанные = Поток.Read(-1);

	Поток.Close();
	Поток = Неопределено;

	Возврат ДвоичныеДанные;
	
КонецФункции

//**************************************************************************************
Функция ДвоичныеДанныеВстроку(ДвоичныеДанные) Экспорт

	Поток = Новый COMОбъект("ADODB.Stream");
	Поток.Open();
	Поток.Type = 1;
	Поток.Write(ДвоичныеДанные);

	Поток.Position = 0;
	Поток.Type = 2;
	Поток.Charset = "utf-8";

	ВыхСтр = Поток.ReadText(-1);

	Поток.Close();
	Поток = Неопределено;

	Возврат ВыхСтр;
	
КонецФункции

//**************************************************************************************
Функция ДвоичныеДанныеВBase64(bin) Экспорт
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла();

	Поток = Новый COMОбъект("ADODB.Stream");
	Поток.Open();
	Поток.Type = 1;
	Поток.Write(bin);
	Поток.SaveToFile(ИмяВременногоФайла, 1);
	Поток.Close();
	Поток = Неопределено;

	ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
	УдалитьФайлы(ИмяВременногоФайла);

	Возврат Base64Строка(ДвоичныеДанные);
	
КонецФункции

//**************************************************************************************
Функция Base64ВДвоичныеДанные(ВхСтрока) Экспорт
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
	ДвоичныеДанные = Base64Значение(ВхСтрока);
	ДвоичныеДанные.Записать(ИмяВременногоФайла);

	Поток = Новый COMОбъект("ADODB.Stream");
	Поток.Open();
	Поток.Type = 1;
	Поток.LoadFromFile(ИмяВременногоФайла);
	ДвоичныеДанные = Поток.Read(-1);
	Поток.Close();
	Поток = Неопределено;

	УдалитьФайлы(ИмяВременногоФайла);
	Возврат ДвоичныеДанные;
	
КонецФункции

//**************************************************************************************
Процедура ЗашифроватьНажатие(Элемент)
	
	ОбъектШифрования = Новый COMОбъект("System.Security.Cryptography.RSACryptoServiceProvider");
	//генерируем новый приватный и публичный ключи
	//в рабочей версии ключи требуется раздать пользователям и хранить
	ПубличныйИПриватныйКлюч = "";
	ПубличныйКлюч = "";
	RSAСоздатьКлючи(ПубличныйКлюч, ПубличныйИПриватныйКлюч);
	
	Сообщить("Публичный и приватный ключ:");
	Сообщить(ПубличныйИПриватныйКлюч);
	Сообщить("Публичный ключ:");
	Сообщить(ПубличныйКлюч);
	
	//Инициализация объект RSA, используя данные ключа из строки XML.
	//http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.rsa.fromxmlstring.aspx
	ОбъектШифрования.FromXmlString(ПубличныйКлюч);

	//преобразование строки для шифрования в двоичный вид
	ИсхТекстДвоичн = СтрокаВДвоичныйВид(ИсхТекстСтрока);
	
	//шифруем
	ЗашифрованныйТекстДвоичн = ОбъектШифрования.Encrypt(ИсхТекстДвоичн, False);

	//преобразование зашифрованных данных в Base64
	ЗашифрованныйТекстСтр = ДвоичныеДанныеВBase64(ЗашифрованныйТекстДвоичн);
	Сообщить("Зашифрованный текст: ");
	Сообщить(ЗашифрованныйТекстСтр);

	ОбъектШифрования.FromXmlString(ПубличныйИПриватныйКлюч);

	ЗашифрованныйТекстДвоичн2 = Base64ВДвоичныеДанные(ЗашифрованныйТекстСтр);
	РасшифрованныйТекстДвоичн = ОбъектШифрования.Decrypt(ЗашифрованныйТекстДвоичн2, False);

    //преобразование расшифрованных данных в строку
	РасшифрованныйТекстСтр = ДвоичныеДанныеВстроку(РасшифрованныйТекстДвоичн);

    Сообщить("Расшифрованный текст: ");
	Сообщить(РасшифрованныйТекстСтр);

	ОбъектШифрования = Неопределено;
	
КонецПроцедуры

//******************************************************************
Процедура RSAСоздатьКлючи(КлючШифрования, КлючШифрованияИРасшифрования) Экспорт
	
	//http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.rsa.toxmlstring.aspx
	
	ОбъектКриптографии = Новый COMОбъект("System.Security.Cryptography.RSACryptoServiceProvider");
	КлючШифрования = ОбъектКриптографии.ToXmlString(False);
	КлючШифрованияИРасшифрования = ОбъектКриптографии.ToXmlString(True);
	ОбъектКриптографии = Неопределено;
	
КонецПроцедуры

Скачать обработку

Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 4 мая 2011 г. N 99-ФЗ "О лицензировании отдельных видов деятельности".

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *