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


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

   Таким образом - встала задача шифрования значения одного из реквизитов регистра. Понимая, что ни для этого клиента, ни для этой базы не нужен какой-либо реально стойкий алгоритм шифрования, а также зная, что работу базы не поддерживает ни один постоянный 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.

 

 

Файлы обработки:

-