gifts2017

Шифрование строки

Опубликовал evd в раздел Программирование - Защита и шифрование

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

   Таким образом - встала задача шифрования значения одного из реквизитов регистра. Понимая, что ни для этого клиента, ни для этой базы не нужен какой-либо реально стойкий алгоритм шифрования, а также зная, что работу базы не поддерживает ни один постоянный 1С-ник, то остановился на простом решении. Весь алгоритм шифрования-дешифрования уложился в 40 строчек текста программы.

 

Самое простое решение выглядело как перегон шифруемой строки (в которую может быть преобразовано любое значение) в коды символов  в 16-ричном виде и запись этой строки. Тогда,  каждый символ исходной строки будет представлен двумя символами  кода в шифрованной. При чтении данных – обратное преобразование. 

Ясно, что любой программист при наличии текста программы легко дешифрует эту строку. Поэтому необходимо было сделать так, чтобы даже при наличии текста затруднить этот процесс.

Было решено проводить посимвольное шифрование с использованием кодового слова следующим образом 

  НовыйКодСимвола = КодСимволаИсходнойСтроки+КодСимволаКлючевогоСлова.

Тогда одинаковые символы на разных местах исходной строки будут представлены разными кодами. 

Для 1С7.7  1 символ=1 байт.  Максимальный код нового символа может быть 510=255+255. Чтобы новый код представлялся всегда не более чем двумя символами 16-ричной системы счисления уже не хватает, но достаточно 24-ричной.

Для 1С8.2 1символ=2 байтам. Будем считать, что в кодовом слове будут использоваться только русские и латинские символы и стандартные знаки и цифры. Тогда код символа не будет превышать значения кода буквы "ё" - 1105, которая идет после "я". Нужна уже 47-ричная система, если шифровать 1 символ исходного слова в  2 символа шифрованного, или 14-ричная, если в 3 символа.

Если для стандартного вида 16-ричного числа используется ряд “01…….9ABCDEF”, то для 24-ричного числа можно продолжить этот ряд дальше, а можно использовать любой ряд из 24 неповторяющихся символов, тоже относится и к 47-ричной системе

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

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

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

  Реализуется на любой платформе и на любом языке программирования. В приложении - обработки для 1С7.7  и 1С8.2.

 

 

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

Наименование Файл Версия Размер
Шифрование24.zip 118
.zip 12,16Kb
21.10.11
118
.zip 12,16Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. evd 21.10.11 23:04
Недавно ко мне обратился клиент, который захотел иметь в базе данные, значения которых он не хотел предоставлять никому, в том числе и пользователям с правами администратора. Они должны были использоваться при анализе деятельности предприятия.

Таким образом - встала задача шифрования значения одного из реквизитов регистра. Понимая, что ни для этого клиента, ни для этой базы не нужен какой-либо реально стойкий алгоритм шифрования, а также зная, что работу базы не поддерживает ни один постоянный 1С-ник, то остановился на простом решении. Весь алгоритм шифрования-дешифрования уложился в 40 строчек текста программы.



Перейти к публикации

1. Сергей Ожерельев (Поручик) 21.10.11 23:04
(0) Клиент - торговец оружием или наркотиками?
2. Вячеслав Кадацкий (marsohod) 21.10.11 23:30
(1) Поручик, скорее - медицинскими препаратами ;)
3. Александр Лыткин (TrinitronOTV) 22.10.11 09:04
marsohod пишет:

(1) Поручик, скорее - медицинскими препаратами ;)

а эту деятельность надо теперь шифровать?
4. evd 22.10.11 14:50
(1) Клиент - из серии "неуловимый Джо". Он шифруется от собственных сотрудников, а не от внешних врагов.
У внешних термо-ректальный метод расшифровки работает всегда, внутренним применять его затруднительно.
5. Михаил М (Михаська) 24.10.11 09:14
Неплохо неплохо.. а что бы какой бы то нибыло программист не добрался до исходного кода, предложи заказчику носить его на груди на флешке ;) xD
6. Михаил М (Михаська) 24.10.11 09:15
да, и еще одно, хотел добавить.. если дешифровать строку не в монопольном режиме всем другим пользователем она так же станет доступна.. надеюсь ты этот факт учел
7. evd 24.10.11 14:43
(6) Всякое решение имеет ограничения. В данном случае защищаются не от профессионалов.
Ничего не мешает пользуясь, скажем, RAdmin посмотреть данные у пользователя на экране при открытом отчете.
Поэтому нет смысла тратить время и деньги на то, что может легко быть достигнуто другим путем. У нас в стране любят говорить о "несимметричных ответах". В комментарии (4) я уже упоминал термо-ректальный метод. Он решает подобные проблемы ровно за 2 минуты.
8. Евгений Зорин (evn-zorin) 26.10.11 11:04
"термо-ректальный" - от души!:)
9. evd 26.10.11 16:28
(8) evn-zorin, Есть разные варианты использования метода - термо-ректальный - сначала включить, потом вставить. Ректо-термальный - соответственно сначала вставить, потом включить. Методика разная - результат одинаковый
10. Андрей (andru_dv) 08.02.12 00:43
Вот оно как просто то всё, оказывается. А я то голову ломал... как шифровать чиселки!
12. Dima (baxxeg) 03.05.12 18:45
А что не взять готовое решение на форуме - кодирование в MD5?
13. evd 03.05.12 19:02
(12) baxxeg, В этом решении не требуется вообще ни одной сторонней библиотеки или компоненты, реализуется на любом языке. Из пушки по воробьям стрелять не хочется...
14. Влад Шнурков (vladshnurkoff) 07.12.12 12:21
Забавно )) Взял на заметку. Спасибо!
15. muha muhaha (fr.myha) 16.07.13 11:17
Спасибо. Мне еще понравился этот способ http://infostart.ru/public/16791/
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа