Практика применения XOR. XOR кодирование строковых полей с помощью ключа. Побитовые операции

06.11.20

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

В данной статье я расскажу о битовой операции XOR (исключающее ИЛИ) и приведу наиболее интересные примеры ее применения на 1С методами платформы. Обмен значений переменных без использования дополнительной переменной.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Практика применения XOR. XOR кодирование строковых полей с помощью ключа. Побитовые операции.:
.epf 10,54Kb
18
18 Скачать (1 SM) Купить за 1 850 руб.

Обработка предназначена для шифрование строковых полей - паролей пользователей или других строковых значений через строковый ключ методом XOR.

Разработка и тестирование было на платформе 1С 8.3.16. Подходит под любую конфигурацию. 

Это не готовое решение, а только механизм шифрование. Для его внедрения в вашу базу нужно будет перенести основные процедуры в вашу конфигурацию и подключить их.

Они представлены в виде обработки с простым интерфейсом. 

За основание взято шифрования на JAVA

public static byte[] encode(String pText, String pKey) { byte[] txt = pText.getBytes(); byte[] key = pKey.getBytes(); byte[] res = new byte[pText.length()]; for (int i = 0; i < txt.length; i++) { res[i] = (byte) (txt[i] ^ key[i % key.length]); } return res; }

///////////////////////////////////////////

Аналог функции на 1С

&НаСервере
Функция xor_encode(pText,pKey)
    
    СистемнаяИнформация = Новый СистемнаяИнформация;
    Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения,"8.3.9.0") > 0 Тогда 
        _txt     = getBytes(pText);
        _key     = getBytes(pKey);
    Иначе     
        _txt      = Преобразовать64(Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(pText)));
        _key      = Преобразовать64(Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(pKey)));
    КонецЕсли;
    
        _res      = Новый Массив(); //СтрДлина(pText));
    
    Для i = 0 по _txt.Count() - 1 Цикл 
        _res.add(BitwiseXor(_txt[i] ,  _key[(i % _key.Count())]));
    КонецЦикла;    
    
    //Строка64ИзБайтов = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(Преобразовать64(,_res)),"windows-1252");
    Строка64ИзБайтов = getStringBase64(_res);

    Возврат Строка64ИзБайтов;
    
КонецФункции

дешифрование на java

public static String decode(byte[] pText, String pKey) { byte[] res = new byte[pText.length]; byte[] key = pKey.getBytes(); for (int i = 0; i < pText.length; i++) { res[i] = (byte) (pText[i] ^ key[i % key.length]); } return new String(res); }

Аналог на 1С

&НаСервере
Функция xor_decode(pText,pKey)
    
    СистемнаяИнформация = Новый СистемнаяИнформация;
    Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения,"8.3.9.0") > 0 Тогда 
        _key     = getBytes(pKey);
    Иначе     
        _key      = Преобразовать64(Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(pKey)));
    КонецЕсли;

        _res      = Новый Массив(pText.Count());
    
    Для i = 0 по pText.Count() - 1 Цикл 
        _res[i] = BitwiseXor(pText[i] ,  _key[(i % _key.Count())]);
    КонецЦикла;    
    
    //Строка64ИзБайтов = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(Преобразовать64(,_res)));
    Строка64ИзБайтов = getString(_res);
    
    Возврат Строка64ИзБайтов;
    
КонецФункции

Все дополнительные процедуры в обработке. Работает на 8.3.15.

&НаСервере
Функция getBytes(pText)
    
    BytesArray = New Array();
    
    BinaryStrem = GetBinaryDataFromString(pText).OpenStreamForRead();
    
    DataReader = New DataReader(BinaryStrem, TextEncoding.UTF8, ByteOrder.BigEndian);

    DataBuffer = DataReader.ReadIntoBinaryDataBuffer();
    
    //пройдемся по каждому байту буфера
    For Each Byte in DataBuffer Do
         BytesArray.Add(Byte);
    EndDo;

    Return BytesArray;
    
КонецФункции

&НаСервере
Функция getBytesFromStr64(base64)
    
    bindata = Base64Значение(base64);
    HexСтрока = ПолучитьHexСтрокуИзДвоичныхДанных(bindata);
    
    BinaryStrem = ПолучитьДвоичныеДанныеИзHexСтроки(HexСтрока).ОткрытьПотокДляЧтения();
    
    BytesArray = New Array();
        
    DataReader = New DataReader(BinaryStrem, TextEncoding.UTF8, ByteOrder.BigEndian);
    
    DataBuffer = DataReader.ReadIntoBinaryDataBuffer();
    
    //пройдемся по каждому байту буфера
    For Each Byte in DataBuffer Do
        BytesArray.Add(Byte);
    EndDo;
    
    Return BytesArray;
    
КонецФункции

&НаСервере
Функция getString(BytesArray)
    
    DataBuffer = Новый БуферДвоичныхДанных(BytesArray.Количество(),ByteOrder.BigEndian);
    For Byte = 0 по BytesArray.Количество() -1 Do
         DataBuffer.Установить(Byte,BytesArray[Byte]);
     EndDo;
     
    Return ПолучитьСтрокуИзБуфераДвоичныхДанных(DataBuffer,TextEncoding.UTF8);
    
КонецФункции

&НаСервере
Функция getStringBase64(BytesArray)
    
    DataBuffer = Новый БуферДвоичныхДанных(BytesArray.Количество(),ByteOrder.BigEndian);
    For Byte = 0 по BytesArray.Количество() -1 Do
         DataBuffer.Установить(Byte,BytesArray[Byte]);
     EndDo;
     
    Return Base64Строка(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(DataBuffer));
    
КонецФункции


 

Есть аналоги процедуры для 8.2.

Xor Кодирование Хеш Хеширование Обработка Побайтовые операции

См. также

Защита ПО и шифрование Программист Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Представляю вам микрорасширение, которое запрещает глобальный поиск по вашей конфигурации.

1 стартмани

09.02.2023    2700    11    aximo    5    

2

Защита ПО и шифрование Программист Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    2128    2    olevlasam    3    

3

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3563    16    keyn5565`    0    

14

Защита ПО и шифрование Программист Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    4445    9    vit59    2    

6

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Работает только в файловом варианте с версии платформы 8.3.22.1368 из-за конструктора ГенераторСлучайныхЧисел, поскольку алгоритм был изменён.

10 стартмани

16.06.2022    12649    105    ZhokhovM    12    

45

Защита ПО и шифрование Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    6115    3    ge_ni    9    

2

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    5076    2    idm80    12    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ab_initio 95 06.11.20 16:04 Сейчас в теме
Я, чесслово, слезу пустил...
Такой привет из загробной жизни. Не ужели ксорки не умерли вместе с Z80?

http://zxpress.ru/book_articles.php?id=1016
http://zxpress.ru/article.php?id=6266
Rafaraf; kv.lv; +2 Ответить
2. kv.lv 10 08.11.20 01:36 Сейчас в теме
На просторах интернета не нашел нормального ришения. все з внешними компонентами и другими кастилями.
пришлось самому писать((

и да... кроски в платформе 1с появились относительно недавно((
3. artmicro 16.09.21 15:57 Сейчас в теме
При открытии ошибка, что отсутствует функция BitwiseXor
4. kv.lv 10 09.11.21 16:08 Сейчас в теме
нужно на платформе выше 8.3.15
5. kembrik 10 22.11.23 09:36 Сейчас в теме
(4) А зачем тогда сравнение с 8.3.9.0 xor_decode?

Ищу решение как раз для версии в режиме совместимости с 8.3.7, у вас написано что есть вариант для 8.2, можете приложить?
Оставьте свое сообщение