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

06.11.20

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

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

Скачать исходный код

Наименование Файл Версия Размер
Практика применения XOR. XOR кодирование строковых полей с помощью ключа. Побитовые операции.:
.epf 10,54Kb
17
.epf 10,54Kb 17 Скачать

Обработка предназначена для шифрование строковых полей - паролей пользователей или других строковых значений через строковый ключ методом 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    2253    9    aximo    4    

2

Как защитить pdf файл

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

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

2 стартмани

30.01.2023    1706    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

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

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

1 стартмани

04.12.2022    3048    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

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

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

2 стартмани

31.08.2022    3882    7    vit59    2    

6

Обфускатор байт-кода

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

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

10 стартмани

16.06.2022    10523    82    ZhokhovM    12    

41

Как уберечь конструкторскую документацию от воровства конкурентами?

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

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

2 стартмани

09.03.2022    5704    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

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

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

1 стартмани

27.12.2021    4612    2    idm80    11    

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, можете приложить?
+
Оставьте свое сообщение