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

Опубликовал Андрей Скляров (coder1cv8) в раздел Программирование - Защита и шифрование

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

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

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

Наименование Файл Версия Размер
Encipher.zip
.1227601701 252,40Kb
25.09.09
551
.1227601701 252,40Kb 551 Бесплатно
capicom.dll
.1227175352 456,00Kb
25.09.09
601
.1227175352 456,00Kb 601 Бесплатно
Encrypt.zip
.1227168937 4,84Kb
25.09.09
694
.1227168937 4,84Kb 694 Бесплатно

См. также

Добавить вознаграждение
Комментарии
1. Андрей Скляров (coder1cv8) 3275 20.11.08 11:33 Сейчас в теме
Ей также можно дешифровать строки после моего обфускатора, только т-с-с-с! )
2. Дмитрий Воробьев (vde69) 867 20.11.08 12:20 Сейчас в теме
давно хотел поиграться на эту тему, а тут повод :)
конечно все простенько

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

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

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

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

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

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

А все таки не смотрели как можно шифровать 1 ключом, а расшифровывать другим. Один ключ публичный для расшифровки, другой для шифрования.
57. Андрей Скляров (coder1cv8) 3275 26.12.08 10:37 Сейчас в теме
(56) Crypto API это позволяет, а объект CAPICOM, в свою очередь поддерживает практически все возможности Crypto API. Как это реализовать на практике, я лично, не задумывался... Я здесь давал уже ссылку, по-моему, на описание Crypto API на русском, почитай...
ЗЫ: Это называется асимметричный алгоритм )
58. Владимир Пушин (vladnet) 223 26.12.08 11:01 Сейчас в теме
Читаю, пока не разобрался (
59. MTM (BOZKURT) 13.01.09 00:51 Сейчас в теме
60. MTM (BOZKURT) 13.01.09 00:55 Сейчас в теме
по поводу ошибки http://infostart.ru/profile/657/
я с третьей попытки допер.. :)
61. Андрей Скляров (coder1cv8) 3275 13.01.09 07:42 Сейчас в теме
(60) А я то думал это очевидно! :)
62. Олег (mov68) 27 11.11.09 14:34 Сейчас в теме
Вопрос к спецам: есть ли шэш функции и как к ним обратиться, или плиз ссылку толковую на функции DDL.
63. xvas (xvas) 29.09.11 14:28 Сейчас в теме
64. igor sarafanov (ms200999) 22.11.11 14:24 Сейчас в теме
(63)Согласен.
Сохранил в закладки.
65. muha muhaha (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 (чтобы не использовать вектор инициализации при расшифровке) и выдавать наружу только зашифрованный кусок, а не структуру???
67. Максим Кузьмин (teorver) 19.02.15 10:37 Сейчас в теме
(1) coder1cv8, Один умник до меня сделал обфускацию общего модуля... теперь сижу и парюсь, не могу обратно все вернуть, а очень надо, ибо нужны изменения в этом модуле. Ума не приложу как де-обфускацию сделать :(