Пример шифрования данных.

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

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

Обработка представляет собой простой пример шифровки/дешифровки произвольного текста, без использования внешних библиотек, средствами Windows (c помощью объекта «CAPICOM.EncryptedData»). Если capicom.dll всё же нет в Вашей версии Windows - то её можно скачать здесь же.
Использование данного подхода на практике, можно увидеть в моей разработке «Обфускация кода 1С» ( //infostart.ru/projects/2057 ).

+ Бонус от Abadonna!
Encipher - внешнее приложение, всё то же самое, но без использования 1С. :)

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

Наименование Файл Версия Размер
Encipher.zip

.1227601701 252,40Kb
25.09.09
692
.1227601701 252,40Kb 692 Скачать бесплатно
capicom.dll

.1227175352 456,00Kb
25.09.09
715
.1227175352 456,00Kb 715 Скачать бесплатно
Encrypt.zip

.1227168937 4,84Kb
25.09.09
843
.1227168937 4,84Kb 843 Скачать бесплатно

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. coder1cv8 3478 20.11.08 11:33 Сейчас в теме
Ей также можно дешифровать строки после моего обфускатора, только т-с-с-с! )
67. teorver 19.02.15 10:37 Сейчас в теме
(1) Один умник до меня сделал обфускацию общего модуля... теперь сижу и парюсь, не могу обратно все вернуть, а очень надо, ибо нужны изменения в этом модуле. Ума не приложу как де-обфускацию сделать :(
2. vde69 911 20.11.08 12:20 Сейчас в теме
давно хотел поиграться на эту тему, а тут повод :)
конечно все простенько

кстати можно нельзя шифровать несколькими ключами?
3. coder1cv8 3478 20.11.08 12:34 Сейчас в теме
(2) Что значит несколькими? Типа массива из нескольких строк?... Нет, насколько я знаю...
4. vde69 911 20.11.08 12:39 Сейчас в теме
(3) нет я имею в виду шифрование с резервным ключем, тоесть есть 2 ключа (разных), мы шифруем и расшифровать можно любым из этих двух.

например шифрование дисков так сделано, в случае утраты ключа можно расшифроврать ключем администратора
6. coder1cv8 3478 20.11.08 12:45 Сейчас в теме
(4) Вот насчет этого не в курсе... Вот описание Crypto API в msdn: http://msdn.microsoft.com/en-us/library/aa380254(VS.85).aspx там есть ответ, я в англицком не силен, к сожалению! (
7. vde69 911 20.11.08 12:51 Сейчас в теме
(6) похоже, что можно... хотя надо будет попробовать, может вечером поиграюсь
Тут можно прикольную систему сделать...
5. vde69 911 20.11.08 12:41 Сейчас в теме
кстати EncryptedData - не штатная библиотека, (укажи в загаловке ссылку на скачивание) хотя и халявная
10. coder1cv8 3478 20.11.08 12:56 Сейчас в теме
(5) Вроде же входит в состав Windows?...
ЗЫ: У кого нету можно скачать тут: http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&DisplayLang=en
14. Noy 1066 20.11.08 14:36 Сейчас в теме
Учитывая (10) думаю что обработку надо переименовать - "штатно" уже не катит...
15. coder1cv8 3478 20.11.08 14:46 Сейчас в теме
(14) А кто бы подсказал в каких виндах этой длл-ки нету?... ) Похоже от ХР и выше?...
16. Noy 1066 20.11.08 15:56 Сейчас в теме
(15) у меня на ноуте ХР СП3 - длл-ки нет...
17. coder1cv8 3478 20.11.08 17:19 Сейчас в теме
(16) Хм, странно... У меня XP Prof SP2 dll-ка есть.
Ладно, в любом случае, шапку переименовал и сюда библиотеку положил )
8. MRAK 716 20.11.08 12:54 Сейчас в теме
При нажатии "дешифровать" выдает "Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса"
9. MRAK 716 20.11.08 12:55 Сейчас в теме
а, ясно... качать надоть...
11. coder1cv8 3478 20.11.08 13:04 Сейчас в теме
Для тех у кого по каким-то причинам (ха-ха) не получается скачать с сайта microsoft, добавил dll-ку в шапку.
12. MRAK 716 20.11.08 13:50 Сейчас в теме
Теперь:
{Форма.Форма(29)}: Ошибка при вызове метода контекста (SetSecret): Произошла исключительная ситуация: Параметр задан неверно.
Пытаюсь расшифровать код "Обфускация кода 1С")))
elena_angren77@mail.ru; +1 Ответить
13. coder1cv8 3478 20.11.08 14:16 Сейчас в теме
(12) Дык, задавай ключ верно, что ж ты хочешь! )
18. luns 20.11.08 19:05 Сейчас в теме
coder1cv8 красвчик!!! Всегда плюсую авансом...
19. Душелов 3916 21.11.08 01:34 Сейчас в теме
Вот из-за таких, как он decode для 1С-ки не нужна будет :)
20. coder1cv8 3478 21.11.08 09:52 Сейчас в теме
Добавил генерацию ключа :)
21. Abadonna 3859 24.11.08 08:18 Сейчас в теме
(0) Я тут от не фиг делать написал внешнее приложение для шифрования. На разработку, по моим понятиям, как-то не тянет, если хочешь - кину тебе на мыло, прицепишь еще файлик ;)
(тоже с генерацией ключа - GUID)
luns; Olga_siberia; Yasen; vasilykushnir; JohnyDeath; ded00786; coder1cv8; +7 Ответить
22. coder1cv8 3478 24.11.08 09:30 Сейчас в теме
(21) Давай, кидай. Отчего же не прицепить? )
23. coder1cv8 3478 24.11.08 09:32 Сейчас в теме
+(22) coder1cv8 собака yandex.ru
24. vde69 911 24.11.08 18:42 Сейчас в теме
ну собствено как я и говорил, ты меня сподвиг на подвиг :) сделал идентификацию изменения критических полей элементов базы по хешу http://infostart.ru/projects/2964/
25. German 874 25.11.08 09:45 Сейчас в теме
а зная закодированный фрагмент и результат можно вычислить ключ?
26. coder1cv8 3478 25.11.08 10:07 Сейчас в теме
(25) Ну насколько я знаю, абсолютно надежных алгоритмов шифрования нет ) Кстати, ты заметил, каждое повторное шифрование одних и тех же данных, одним и тем же ключем, дает различающийся результат.
ЗЫ: Вот здесь http://www.inattack.ru/article/472.html можно почитать про Crypto API на русском.
27. vde69 911 25.11.08 10:22 Сейчас в теме
(25) если это MD5 то практически нет (а там пожно юзать MD5), есть статьи по этому, в отдельных случаях подломать можно, но это исключение.
ХЕШ MD5 ломают по таблицам извесных хешей, кстати виндовые пароли именно на хешах MD5 базируються
28. ded00786 346 25.11.08 11:28 Сейчас в теме
А как насчет графического шифрования?
Это так, информация к размышлению ;)
29. coder1cv8 3478 25.11.08 11:32 Сейчас в теме
Добавил утилитку написанную Abadonna. Плюсики ему можно поставить здесь же в комментах :)
30. ded00786 346 25.11.08 11:37 Сейчас в теме
32. vladnet 349 26.12.08 09:16 Сейчас в теме
У меня вот такая ошибка: {Форма.Форма(30)}: Ошибка при вызове метода контекста (Decrypt): Произошла исключительная ситуация: Встречено неверное значение тега ASN1.

Библиотеку выкачал, хотя она и была и зарегил.
33. Abadonna 3859 26.12.08 09:22 Сейчас в теме
(32) Ха! У меня как раз такое на 7-ке вчера было, когда восстанавливал зашифрованные пароли пользователей из базы по учету всякой хрени ;)
После шифрования заменил символы перевода строки на ‡ перед запистью в справочник (dbf), а при считывании - опять меняю ‡ на РазделительСтрок. Так взлетело
34. vladnet 349 26.12.08 09:36 Сейчас в теме
(33) В исходном тексте не встречается переводов строк (

Да ошибка вылетает как в обработке 1с, так и в твоем Encipher

Кстати а можно ли с помощью этой библиотеки шифровать 2 ключами:
один для шифрования, другой для расшифрования?
36. coder1cv8 3478 26.12.08 09:39 Сейчас в теме
(34) А перешифрование исходного текста не помогает?...
37. Abadonna 3859 26.12.08 09:39 Сейчас в теме
(34) Ты Encipher запусти, набери, например, слово "молоко" и зашифруй.
Сколько строчек внизу будет? ДВЕ! Думаешь я сам их там так разбил? Ни фига, там образовался при шифровании символ перевода строки
38. Abadonna 3859 26.12.08 09:41 Сейчас в теме
+(37) А вот при записи уже в базу (в дбф уж - точно) - происходит корявая запись в поле
39. coder1cv8 3478 26.12.08 09:42 Сейчас в теме
(37) По моим наблюдениям перевод строки в шифрованном тексте сделан исключительно для удобства. В частности, в моем "Обфускаторе" я совсем убираю переводы строк из шифрованного текста, на расшифровку это никоим образом не влияет!
40. Abadonna 3859 26.12.08 09:44 Сейчас в теме
(39) Ну попробуй ради интереса записать в dbf строку "мама"+РазделительСтрок+"папа" и погляди, что запишется
43. vladnet 349 26.12.08 09:46 Сейчас в теме
(40) пока совсем не понял при чем тут ДБФ?
Все происходит внутри одной обработки. Понимаю что там может быть разные переводы.
41. vladnet 349 26.12.08 09:44 Сейчас в теме
(34) Перешифрование не помогает, пробовал разные алгоритмы
(38) Так я ведь в ДБФ не пишу, пробовал убрать переводы не помогает (
42. Abadonna 3859 26.12.08 09:45 Сейчас в теме
(41) Ну не знаю.. Именно так я вчера победил её
44. coder1cv8 3478 26.12.08 09:46 Сейчас в теме
(41) Можно пример текста и ключ?...
45. vladnet 349 26.12.08 09:47 Сейчас в теме
(44)

молоко
237541f0ca3e432ba2dbac92485d1207
48. coder1cv8 3478 26.12.08 09:52 Сейчас в теме
(45) У меня проблема не воспроизводится.
(47) Та я шучу! )
31. logarifm 08.12.08 15:10 Сейчас в теме
35. coder1cv8 3478 26.12.08 09:38 Сейчас в теме
Действительно, получается что-то с зашифрованными данными не так...
46. coder1cv8 3478 26.12.08 09:47 Сейчас в теме
ДБФ тут ни причем! Это Абадонна о своем, о наболевшем наверно ))
47. Abadonna 3859 26.12.08 09:49 Сейчас в теме
(46) О каком наболевшем? У меня все базы на скуле, но не делать же на нем и вшивенькую базу по учету компов-паролей-логинов...
49. vladnet 349 26.12.08 09:52 Сейчас в теме
У меня почему то всегда эта ошибка вылезает, даже если ключом неправильным расшифровывать. Может и прав Абадонна, проблема в переводах строки, то что 1с автоматом заменяет переводы строк на свои, хотя вроде бы не должен. Сейчас проверю.
50. coder1cv8 3478 26.12.08 09:57 Сейчас в теме
51. vladnet 349 26.12.08 10:02 Сейчас в теме
Все извиняюсь неправильно понял то как работает обработка - думал что она при дешифровании берет нижнее поле дешифрует его и в верхнее поле засовывает, оказалось нужно копировать из нижнего в верхнее и потом только дешифровать.
52. coder1cv8 3478 26.12.08 10:04 Сейчас в теме
54. vladnet 349 26.12.08 10:14 Сейчас в теме
(52) (53) Ну я бы так сделал, чтобы тестировать было удобнее (
55. Abadonna 3859 26.12.08 10:16 Сейчас в теме
(54) И нашелся бы человек, который понял все правильно, и начал вставлять в верхнее окошко, и недоумевал бы почему оно не пашет :)))
56. vladnet 349 26.12.08 10:19 Сейчас в теме
(55) По любому )

А все таки не смотрели как можно шифровать 1 ключом, а расшифровывать другим. Один ключ публичный для расшифровки, другой для шифрования.
57. coder1cv8 3478 26.12.08 10:37 Сейчас в теме
(56) Crypto API это позволяет, а объект CAPICOM, в свою очередь поддерживает практически все возможности Crypto API. Как это реализовать на практике, я лично, не задумывался... Я здесь давал уже ссылку, по-моему, на описание Crypto API на русском, почитай...
ЗЫ: Это называется асимметричный алгоритм )
53. Abadonna 3859 26.12.08 10:12 Сейчас в теме
58. vladnet 349 26.12.08 11:01 Сейчас в теме
Читаю, пока не разобрался (
59. BOZKURT 13.01.09 00:51 Сейчас в теме
60. BOZKURT 13.01.09 00:55 Сейчас в теме
по поводу ошибки http://infostart.ru/profile/657/
я с третьей попытки допер.. :)
61. coder1cv8 3478 13.01.09 07:42 Сейчас в теме
(60) А я то думал это очевидно! :)
62. mov68 36 11.11.09 14:34 Сейчас в теме
Вопрос к спецам: есть ли шэш функции и как к ним обратиться, или плиз ссылку толковую на функции DDL.
63. xvas 29.09.11 14:28 Сейчас в теме
64. ms200999 22.11.11 14:24 Сейчас в теме
(63)Согласен.
Сохранил в закладки.
65. fr.myha 16.07.13 11:15 Сейчас в теме
Конечно код 1С можно защищать с помощью сложных программно-аппаратных решений(ключи, специальные продукты для защиты конфигураций), и соответственно, на защиту надо тратить немалые средства и время. А если стоимость разработки находится в переделах 3-5 тысяч рублей, тогда затраты на защиту превышают стоимость самой разработки.

Но не все так грустно. Достаточно вспомнить, что защита от взлома – понятие скорее экономическое. Поэтому для недорогих программных продуктов вполне можно создать защиту, по крайней мере, не дающую свободно тиражировать продукт.
Структура предлагаемой нами защиты следующая:
Внешняя компонента (ВК), выполняющая расшифровку Защищенного Модуля и его загрузку.
Стартовая Обработка (СО), выполняющая роль загрузчика ВК, а также хранящая Защищенный Модуль в виде макета (двоичных данных).
Защищенный Модуль (ЗМ) в зашифрованном виде, загружаемый только через ВК.

Технология защиты проста. Достаточно вынести программный код в модуль объекта ЗМ, организовать вызовы процедур из него, затем зашифровать ЗМ и загрузить в макет. Загрузка ЗМ может выглядеть следующим образом:

http://protect1c.ru/sites/default/files/protect_1c_pic1.png
Загрузка ВК (Addin.dll) и пример работы с защищенным модулем на странице http://protect1c.ru/modules-for-1c
Шифрование кода в ЗМ на странице http://protect1c.ru/upload4code (необходима регистрация на сайте protect1c.ru)
Данная технология работает только для традиционного толстого клиента 1С (обычного приложения )
Несколько замечаний по уязвимости, предваряя флейм на тему «это не защита».
Недостатком этого способа, как неоднократно отмечалось, является необходимость наличия расшифрованной обработки в виде файла на диске. Однако, на самом деле, недостаток этот не так велик, как кажется. Во-первых, время жизни этого файла сведено к минимуму, во-вторых, в модуле объекта ЗМ есть смысл написать следующую строчку:
http://protect1c.ru/sites/default/files/protect_1c_pic2.png
Такая строка не приводит к неработоспособности обработки, но затрудняет отладку. Не следует пренебрегать и стандартными способами защиты: установка пароля на код модуля объекта, поставка без исходных текстов, обфускация кода (http://nashe1c.ru/materials-view.jsp?id=121). При выполнении этих условий вскрытие кода становится достаточно непростой задачей.
Много говорилось о наличии в каталоге %TEMP% файлов с байт-кодом загруженного модуля. Нами было проведено несколько экспериментов на эту тему. В результате выяснилось, что по крайней мере платформа версии 8.2.16.352 не создает файл с кодом МОДУЛЯ ОБЪЕКТА(!). В %TEMP% только модуль формы. Если у кого-то есть другая обоснованная информация – welcome в комментарии.
В ходе экспериментов выяснилось, что оператор Выполнить(СтрокаКоманды) (естественно!) не приводит к компиляции выражения, переданного как СтрокаКоманды, то есть байт-код для этих команд отсутствует. Этот факт предоставляет широкое поле для экспериментов на тему защиты кода. В скобках замечу, что нам так и не удалось заставить выполняться команду выполнить внутри ВК, (злополучный method not supported by automation object () ). Если у кого-то получится – welcome в комментарии.
Достоинством данного подхода является отсутствие необходимости перекомпилировать код ВК, а также то ,что весь код может быть написан только на 1С. Единственной операцией вне рамок 1С программирования является шифрование ЗМ.
66. akifjevda 18.11.13 14:31 Сейчас в теме
Ребята, подскажите такую штуку. Шифрую строку по AES-128 (по факту - XML документ) с помощью capicom.dll и получаю зашифрованную строку. Как я понял она сразу обработана через base64. Проблема в том, что не могу расшифровать в php через mcrypt (алгоритм MCRYPT_RIJNDAEL_128). Даже если просто зашифровать mcrypt эту же строку, то зашифрованный вариант получается совсем другой чем в 1С или в Encipher.exe и примерно 2 раза короче. Где могут быть грабли?

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

Может кто-нибудь подсказать как указать capicom что надо шифровать в режиме ECB (чтобы не использовать вектор инициализации при расшифровке) и выдавать наружу только зашифрованный кусок, а не структуру???
68. timothy_ 2 01.12.17 22:16 Сейчас в теме
С текстом понятно, а как с числами дело обстоит?
Оставьте свое сообщение

См. также

Имплементация алгоритма Keccak на языке 1С

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

Имплементация алгоритма Keccak на 1С версии 8.3.11, примеры функций SHA3-512, Keccak-512, HMAC-3, SHAKE256, cSHAKE256 и другие варианты параметров Keccak без внешних компонент.

07.05.2020    2034    0    mrsmrv    8    

Создаем шифрованные ярлыки.

Универсальные обработки Сервисные утилиты Защита и шифрование v8 1cv8.cf Бесплатно (free)

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

30.09.2009    12551    0    dj_tol    1    

Простой пример защиты конфигурации (1с8)

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

Самый простой пример защиты конфигурации от несанкционированного использования. Базируется на привязке конфигурации к номеру тома флешки. Не претендует на особую новизну или оригинальность но антиламерскую защиту способна обеспечить. Использует WMI.

18.05.2009    24725    0    YVolohov    45    

Защита информации при обмене данными между информационными базами "Управление производственным предприятием"

Защита и шифрование Разработка внешних компонент Обмен через XML v8 УПП1 Бесплатно (free)

Защита информации при обмене с распределенной базой данных. В крупной фирме имеется одна центральная информационная база 1С:Предприятие 8.1 "Управление производственным предприятием" и несколько периферийных баз, обмен данными происходит через файлы XML. После выявления многочисленных случаев несанкционированного доступа к конфиденциальной информации, а именно кассовым и банковским документам при обмене данными, руководством было решено защитить данные при обмене информацией между центральной базой и периферийными базами. Перемещение данных между базами происходит через файлы XML, по нескольким каналам связи FTP, HTTP, POP, SMTP, а также на сменных носителях (типа USB Flash Drive). В связи с этим решено использовать внешнюю компоненту для шифрования файлов XML и небольшой доработки конфигурации баз данных.

25.11.2008    13876    0    astracrypt    13