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

Опубликовал 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
.zip 12,16Kb
21.10.11
120
.zip 12,16Kb 120 Скачать

См. также

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

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



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

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

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

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