Сжатие текстов исключительно средствами языка 1С

20.01.15

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

Обработка упаковывает текст и делает его в виде исполняемого SFX.
Область применения: Just for fun
Побаловался на досуге, размял мозг.
Можно применять для упаковки и нечитаемости текстов процедур и функций, или запросов

Скачать файлы

Наименование Файл Версия Размер
Сжатие.epf
.epf 10,98Kb
17
.epf 10,98Kb 17 Скачать


Цель данной обработки это сжатие текстов.
Поскольку в 1С никогда не требовалось сжимать исходные коды или тексты, то применимость данных методов сомнительна.
Обработка была написана с целью «размять мозг» и для развлечения.
Программа распространяется «Как есть», никаких гарантий и ответственности не подразумевает.
Возможно полезным побочным эффектом работы данного приложения является нечитаемость текстов при сжатии, но в платформе 1С и так предусмотрено сжатие текстов исходных кодов, а так же защита при помощи криптографии, путем установки пароля на тексты модулей
Сжатие (избавление от избыточности) текста при большом количестве итераций происходит довольно медленно и требует много времени, т.к многократно проходит по сжимаемому тексту.
В самом нижнем поле обработка создает текст который можно просто вставить в код своего модуля и данный текст распакуется при исполнении, так называемый «Самораспаковывающийся архив или SFX». Кстати текст который вы сейчас читаете так-же запакован и хранится в коде в запакованном виде, а при запуске обработки выполняется процедура распаковки.
Инструкция.
Для сжатия текста необходимо скопировать или ввести сжимаемый текст в верхнее поле ввода «Исходный», указать максимальное количество итераций для сжатия и нажать на кнопку «Упаковать». Через некоторое время (приблизительно 5 минут) программа заполнит остальные поля формы обработки упакованным текстом и «Разделители».
В окне сообщений будет выведена статистика сжатия: за сколько итераций произошло сжатие.
Строка разделителей по сути является ключом для распаковки сжатого текста, длина этого ключа всегда равна количеству затраченных итераций.

Пример использования:

 

Функция НайтиОптимальноеСловоСжатия(СтруктураПараметров)
Успешно = Ложь;
Текст = СтруктураПараметров.Текст;
СтруктураПараметров.Разделитель = Лев(НайтиНеиспользованныеСимволы(Текст),1);
Если СтруктураПараметров.Разделитель = "" Тогда Возврат Ложь; КонецЕсли;
Т="ЕслиVСжатl94ейaДлdовi8аvКонецo - s + tин0имальнkЦикл_СтрP ПоA;BS
| 5AзицияvWtasOтр9(8)R o_а;DПолi0аd0ыKPокаvL9ВсегоvZ9lогоvXМ0kая9C5 B = 3Разделител4lие6PуктураПараметрi.7Текст8d0а9 Z3сR;5K3Цел(сR / 2);5a3P9(74и)t1;5C3ZO1; 5dя 632A K _5 dяW31A СRs6 _ BL3Сред(8,W, 6)SПiтор3PЧислоВхождений(8,L)SX3Zt6O(6s1) *AвторSV C > X Тогда B C3XS 7ОптkоеСлiо3LS 7636S Успешно3Ист0аSoV; 5DD";
for а=1 to 32 do в=Mid("Vladivost0k_PAS5WORDKLZXCB346789",а,1);б=find(Т,в);Т=StrReplace(Mid(Т,б+1),в,Лев(Т,б-1));enddo;
Выполнить(Т);
Возврат Успешно;
КонецФункции

 

Сжатие LZSS Избыточность Кодирование Обфускация Защита

См. также

Запрет глобального поиска в конфигурации

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

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

1 стартмани

09.02.2023    2224    9    aximo    4    

2

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

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

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

2 стартмани

30.01.2023    1660    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    2986    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    3832    7    vit59    2    

6

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

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

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

10 стартмани

16.06.2022    10310    80    ZhokhovM    12    

40

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

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

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

2 стартмани

09.03.2022    5654    3    ge_ni    9    

2

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

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

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

1 стартмани

27.12.2021    4556    2    idm80    11    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ildarovich 7850 25.11.14 16:58 Сейчас в теме
Какой принцип используется?
Какой коэффициент достигается?
Как относительно zip?
2. eugeniezheludkov 43 26.11.14 01:45 Сейчас в теме
(1) ildarovich,1. Принцип был придуман на ходу, но по прочтению википедии он ближе всего к LZSS:
ищем самый повторяющийся набор символов и заменяем его на неиспользуемый, в данном тексте (из предопределенного набора), символ, и так на повторе, пока не достигнем увеличения размера после сжатия.
2. Коэффициент в зависимости от повторяющихся символов, но в среднем для обычных "тел процедур" размер уменьшается на 30%, это с учетом размера распаковщика, который так же присоединяется к упакованному тексту.
3. Zip сейчас использует множество сжатий RLE + LZW + HAFFMAN поэтому он явно сильней сжимает , и если честно даже не сравнивал

1С не предназначен для этой задачи :)
мой интерес был написать минимальный по размеру и быстрый распаковщик для текстов процедур и запросов (иногда с паролем) если есть что еще оптимизировать я б выложил на гит, но возможно завтра мне будет уже не интересно :(
ПС извиняюсь за слово "Jast" в статье , фэйл
3. DrAku1a 1679 27.11.14 02:42 Сейчас в теме
ZIP = новый ЗаписьZIP();
это не средствами 1С разве?
4. eugeniezheludkov 43 27.11.14 03:10 Сейчас в теме
(3) DrAku1a, в 8.2 нет такого ЗаписьZIP есть лишь ЗаписьZIPФайла, в моем случае предполагается сжимать, к примеру текст запроса, непосредственно в исходном коде конфигурации, а не во внешнем файле и очень быстро распаковав его "на лету", распаковщиком в 4 строки, выполнить. Можно даже защитить паролем который в свою очередь хранить в константе ИБД. пароль в данном случае это строка разделителей, но Да вы совершенно правы, название и текст статьи необходимо сменить но пока в голову ничего не приходит кроме как "развлечения ради", данная обработка неприменима в областях 1С.
Её применение где-нибудь в javascript. для защиты и сжатия кода веб-страницы, собственно что-то подобное уже нашел http://js1k.com/2012-love/demo/1127
алгоритм тот же, разве что подход и формат данных другой

для сравнения с добавил кнопку:
	Упакован = СтрЗаменить(СтрЗаменить(ЗначениеВСтрокувнутр(Новый ХранилищеЗначения(Распакован, Новый СжатиеДанных(9))),Символы.ПС,Символы.ПС+"|"),"""","""""");
    ПересчитатьРазмеры();
	SFX = "Т=ЗначениеИзСтрокиВнутр("""+Упакован+""").Получить()";

результат: zip + base64 быстрее (нативный же), но всегда сжимает хуже чем мой способ сжатия, но как я уже писал мой способ действует лишь на текстовую информацию. В случае с zip: base64 все портит . base58 очень спас-бы ситуацию
5. alexa_19 26.12.19 09:02 Сейчас в теме
Добрый день!
Работает только на обычных формах?
Оставьте свое сообщение