Симметричное шифрование в 1С

Публикация № 363830

Разработка - Защита и шифрование

Шифрование симметричное шифрование

Настоящая статья посвящена реализации в 1С симметричного шифрования встроенными механизмами

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

В данной статье рассматривается шифрование строк. Разбираемые алгоритмы применимы к любым значениям, которые возможно преобразовать в строку и обратно. Например, таблицу значений можно преобразовать в строку методом ЗначениеВСтрокуВнутр и методом ЗначениеИзСтрокиВнутр получить обратно таблицу значений.

В 1С есть два встроенных варианта использования шифрования:

1. Использование электронной подписи (асимметричное шифрование) имеет сложный механизм применения - в настоящей статье не рассматривается.

2. Использование запароленного zip-архива (симметричное шифрование) - рассматривается в настоящей статье.

Для анализа использования алгоритма приведу примеры универсальных функций, выполняющих шифрование и дешифровку данных (функции выполняются на сервере):

Функция ПолучитьЗашифрованныеДанные(ДанныеШифрования,КлючШифрования,ИдентификаторДанных = "0") Экспорт
	
	Попытка
		
		Путь = КаталогВременныхФайлов()+"\"+ИдентификаторДанных;
		ПутьФайла = Путь+".txt";
		ПутьАрхива = Путь+".zip";
		ЗаписьТекста = Новый ЗаписьТекста(ПутьФайла);
		ЗаписьТекста.Записать(ДанныеШифрования);
		ЗаписьТекста.Закрыть();
		ЗаписьАрхива = Новый ЗаписьZipФайла(ПутьАрхива,КлючШифрования,,,,МетодШифрованияZIP.AES256);
		ЗаписьАрхива.Добавить(ПутьФайла);
		ЗаписьАрхива.Записать();
		ДвоичныеДанные = Новый ДвоичныеДанные(ПутьАрхива);
		ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных(9));
		УдалитьФайлы(ПутьФайла);
		УдалитьФайлы(ПутьАрхива);
		Возврат ХранилищеДанных;
		
	Исключение
		Возврат Неопределено;
	КонецПопытки; 

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

Функция ПолучитьРасшифрованныеДанные(ХранилищеДанных,КлючШифрования,ИдентификаторДанных = "0") Экспорт
	
	Попытка
		КаталогСохранения = КаталогВременныхФайлов();
		Путь = КаталогСохранения+"\"+ИдентификаторДанных;
		ПутьАрхива = Путь+".zip";
		ХранилищеДанных.Получить().Записать(ПутьАрхива);
		ЧтениеАрхива = Новый ЧтениеZipФайла(ПутьАрхива,КлючШифрования);
		ЭлементАрхива = ЧтениеАрхива.Элементы[0];
		ЧтениеАрхива.Извлечь(ЭлементАрхива,КаталогСохранения);
		ЧтениеАрхива.Закрыть();
		ПутьФайла = КаталогСохранения+"\"+ЭлементАрхива.Имя;
		ЧтениеТекста = Новый ЧтениеТекста(ПутьФайла);
		Данные = ЧтениеТекста.Прочитать();
		ЧтениеТекста.Закрыть();
		УдалитьФайлы(ПутьАрхива);
		УдалитьФайлы(ПутьФайла);
		Возврат Данные;
		
	Исключение
		Возврат Неопределено;
	КонецПопытки; 

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

Функция ПолучитьЗашифрованныеДанные возвращает хранилище значения с зашифрованными двоичными данными.

Параметры функции:

ДанныеШифрования - Строка для зашифровки;

КлючШифрования - Ключ симметричного шифрования (пароль zip-архива);

ИдентификаторДанных - Строка - Произвольное идентификационное значение (необязательный параметр)

Механизм шифрования заключается в следующей последовательности действий:

  1. Шифруемая строка записывается в текстовый файл
  2. Текстовый файл помещается в архив с паролем (метод шифрования можно выбрать, в данном случае используется AES-256)
  3. Записанный архив в зашифрованном виде переводится в двоичные данные
  4. Двоичные данные помещаются в хранилище значения, которое возвращается функцией (в дальнейшем, хранилище значения можно поместить в реквизит какого-либо объекта или регистра и хранить в СУБД до появления необходимости в расшифровке)
  5. Созданные файлы удаляются

Функция ПолучитьРасшифрованныеДанные возвращает расшифрованное строковое значение.

Параметры функции:

ХранилищеДанных -Хранилище значения с зашифрованными данными (значение возвращенное функцией ПолучитьЗашифрованныеДанные);

КлючШифрования - Ключ сииметричного шифрования (пароль zip-архива; такой же, как для функции ПолучитьЗашифрованныеДанные);

ИдентификаторДанных - Строка - Произвольное идентификационное значение (необязательный параметр)

Механизм дешифрования заключается в следующей последовательности действий:

  1. Из зашифрованного хранилища значения извлекаются двоичные данные
  2. Двоичные данные записываются в файл (это должен быть зашифрованный zip-архив)
  3. Из zip-архива извлекается текстовый файл с расшифрованным строковым значением
  4. Из текстового файла считывается расшифрованное строковое значение, которое возвращается данной функцией
  5. Созданные файлы удаляются

Изложил свой опыт работы с симметричным шифрованием в 1С.

Надеюсь, будет кому-нибудь полезен.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. lex27119 02.06.15 16:02 Сейчас в теме
Нужная статья.
Когда-то мне нужно было сделать шифрование в 1С, голову сломал.
2. karpik666 2906 02.06.15 19:14 Сейчас в теме
3. VaranRX 03.06.15 11:34 Сейчас в теме
Если ключ шифрования в конфе то обходится первым же декомпилятором
4. alex271 335 03.06.15 11:44 Сейчас в теме
(3) VaranRX,
А с чего Вы взяли, что ключ шифрования должен быть в конфигурации или в информационной базе.
Тут есть несколько вариантов реализации:
Например, перед шифрованием (дешифрованием) его можно запросить у пользователя и никуда не сохранять.
А если шифрование (дешифрование) будет происходить в конфигурации постоянно, то ключ можно поместить в параметр сеанса, как вариант.
6. sabretoothed 13 15.03.19 14:58 Сейчас в теме
7. sabretoothed 13 15.03.19 15:34 Сейчас в теме
Если ключ проходит через конфигурацию, то проблем его перехватить и сохранить в базу или в отдельный файл нет.Это защитит от пользователей без административных прав, но от них защитить информацию можно и с помощью ролей.Лучше для таких данных создать отдельную базу с доступом только для определенных лиц, и изолировать её от сети чтобы нельзя было выгрузить из неё данные в общую папку какую-нибудь.Но такое решение может повлечь за собой не возможность сделать какие-то отчеты, и придется задуматься об обмене дополнительных данных, а это может быть не так просто.
8. alex271 335 16.03.19 15:54 Сейчас в теме
(7) Разумеется, конфигурацию можно как угодно переписать. Смысл разработки в том, что ключ появляется в памяти только при вводе пользователем и не хранится, ни в базе, ни в конфигурации. Таким образом, если например, база будет украдена, зашифрованную информацию без отдельного взлома ключа получить не удастся.
9. pirnazarov007 15.10.19 11:44 Сейчас в теме
Как сделать чтобы в 1С не Зашифровал уже зашифрованные элементы в симетричном шифрование?
Оставьте свое сообщение

См. также

От Hello world - к защите конфигураций за 1 минуту Промо

Защита и шифрование Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Вы всегда хотели но боялись создать COM объект? Тогда мы идем к вам! С обычным блокнотом, где будем программировать на c#, и таймером ...

19.05.2012    34945    O-Planet    130    

Обезличивание базы средствами Конвертации данных 2

Защита и шифрование v8 КД Бесплатно (free)

Быстро, просто, понятно обезличить нужные данные в любой базе.

14.06.2020    2264    Yashazz    20    

Расшифровка DataMatrix кода с пачки сигарет (табачная продукция)

Защита и шифрование v8 Россия Бесплатно (free)

Разбор считанного DataMatrix кода с пачки сигарет - какие символы за что отвечают. Декодирование МРЦ

07.06.2020    5339    Tasselhof    10    

Кодирование по алфавиту. Большие целые числа

Защита и шифрование v8 1cv8.cf Бесплатно (free)

А вы знали, что 1С умеет в очень длинные числа? Кодирование информации в строку по указанному алфавиту, возможен любой алфавит и не только. В тексте приведён алгоритм для кодирования последовательности байт в любой и из любого односимвольного алфавита.

14.05.2020    1382    mrsmrv    5    

SHA512 и HMAC512 на 1С 8 без использования внешних компонент

Защита и шифрование v8 1cv8.cf Бесплатно (free)

Имплементация алгоритма расчета Hash 512 с ключом и без. С ключом по алгоритму HMAC. Используются механизмы платформы начиная с версии 8.3.11.

29.04.2020    2793    mrsmrv    21    

Алгоритм шифрования AES ECB 128/192/256

Защита и шифрование v8 1cv8.cf Абонемент ($m)

Реализация алгоритма симметричного шифрования AES (Advanced Encryption Standard) в режиме ECB (Electronic codebook) с различной длиной ключа 128/192/256 без использования внешних компонент и zip-файлов.

1 стартмани

20.04.2020    2160    8    NikitaXa    12    

Танцы с бубном! Создаём демонстрационную базу

Защита и шифрование v8 Бесплатно (free)

В статье кратко расскажу Вам о моём опыте создания демонстрационной версии базы данных 1С и способах защиты кода.

08.02.2018    15207    user748289    41    

Защита конфигурации от ...

Защита и шифрование v8 1cv8.cf Бесплатно (free)

Бывают моменты в жизни, когда нужно сделать возможность входа только одному пользователю после определенного времени. Ниже приведен такой код.

18.05.2015    19028    hakerxp    29    

Хеширование данных с ключом по алгоритму SHA-1 штатными средствами 1С

Практика программирования Защита и шифрование v8 1cv8.cf Бесплатно (free)

Расчет хеш суммы данных по алгоритму SHA-1 с ключом штатными средствами 1С.

27.05.2014    27829    dour-dead    15    

И ещё несколько слов о защите разработок...

Защита и шифрование v8 1cv8.cf Россия Бесплатно (free)

Дневные мысли о механизмах защиты кода... (по мотивам http://www.infostart.ru/profile/8914/blogs/660/)

30.10.2008    40094    ValeriVP    79