Пример ассиметричного шифрования(RSA) 1С:Предприятие 8
- 2013-01-24
- Автор: admin
- Рубрика: 1C:Предприятие, Защита информации, Криптография
Внимание! Приведенная информация распространяется исключительно в ознакомительных целях. Перед использованием данных материалов рекомендуется ознакомиться с ФЗ Российской Федерации от 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-ФЗ "О лицензировании отдельных видов деятельности".
Ваш комментарий