Программная реализация в 1С классического метода шифрования «Решетка Кардано»::Журнал СА 03.2019
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6225
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6931
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4213
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3006
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3806
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3819
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6315
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3166
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3459
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7275
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10645
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12364
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13998
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9123
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7077
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5387
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4614
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3426
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3154
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3399
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3024
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Программная реализация в 1С классического метода шифрования «Решетка Кардано»

Архив номеров / 2019 / Выпуск №03 (196) / Программная реализация в 1С классического метода шифрования «Решетка Кардано»

Рубрика: Разработка /  Изучаем «1С»   | Дополнительные материалы

Кирилл Ткаченко КИРИЛЛ ТКАЧЕНКО, инженер 1-й категории, ФГАОУ ВО «Севастопольский государственный университет», tkachenkokirillstanislavovich@gmail.com

Программная реализация в 1С
классического метода шифрования «Решетка Кардано»

Программная реализация в 1С классического метода шифрования «Решетка Кардано»Рассматривается реализация классического метода шифрования «Решетка Кардано» на языке 1С. Эта реализация познакомит с историческим подходом к шифрованию, а также с основными языковыми конструкциями 1С

Современное шифрование достаточно сложно для неподготовленного специалиста. Но для введения в методы шифрования можно ограничиться теми, несложными сейчас, методами, что были известны уже несколько сотен лет назад. К таким методам относят и метод шифрования «Решетка Кардано» [1-3].

Метод на удивление прост и изначально предназначен для ручной реализации. Имеется лист для записи. Имеется решетка – лист, в котором есть отверстия-окошки. Прикладывая решетку к листу, в эти отверстия-окошки решетки записывается открытый текст по порядку. Когда открытый текст еще остался, а отверстия-окошки решетки уже заполнены, решетка поворачивается на 90 градусов. Оставшиеся свободным места листа заполняются произвольным текстом.

Для рассматриваемой ниже программной реализации предполагается, что лист квадратный, сторона N=4, решетка квадратная, сторона N=4, отверстий-окошек на решетке N=4, поворот происходит на 90 градусов по часовой стрелке, в отверстие-окошко можно записать только один символ. Также полагается, что при поворотах отверстия-окошки не накладываются друг на друга и исходный текст занимает ровно N2 символов. В таком виде, в силу значительного упрощения, имеются даже олимпиадные задачи по программированию на тему этого метода шифрования [4].

Поэтому целью настоящей работы является разработка программной реализации упрощенного варианта классического метода шифрования «Решетка Кардано» в 1С.

Для иллюстрации пусть исходная строка есть «АБВГДЕЁЖЗИЙКЛМНО», а решетка – «.*..*.....*....*» (по аналогии с [1, рис. 48, правый нижний фрагмент]), в которой отверстие-окошко обозначается «*», а отсутствие отверстия-окошка – «.». Решетка и применение ее к исходной строке изображаются на рис. 1.

Рисунок 1. Иллюстрация шифрования методом «Решетка Кардано»

Рисунок 1. Иллюстрация шифрования методом «Решетка Кардано»

Вся программа помещается в модуль управляемого приложения пустой конфигурации. В начале модуля определяется переменная, содержащая сторону квадрата решетки шифрования и одновременно с этим число отверстий в решетке и число поворотов N:

Перем N;

Процедура Инициализация() присваивает N значение 4:

Процедура Инициализация()
    N = 4;
КонецПроцедуры

Функция ИсходнаяРешетка(РешеткаТекст) производит построение и возврат удобного внутреннего представления решетки для программы на основе строкового представления РешеткаТекст. Двумерный массив Решетка служит для этого построения, а i и j играют роль счетчиков:

Функция ИсходнаяРешетка(РешеткаТекст)
    Перем Решетка;
    Перем i, j;

Создается новый двумерный массив Решетка:

    Решетка = Новый Массив(N, N);

Всем ячейкам этого массива, по строкам и столбцам:

    Для i = 0 По N - 1 Цикл
	Для j = 0 По N - 1 Цикл

Присваивается значение соответствующего значения символа РешеткаТекст, номер которого в символьной строке определяется с учетом конкатенации по строкам матрицы:

	    Решетка[i][j] = Сред(РешеткаТекст, i * N + j + 1, 1);
	КонецЦикла;
    КонецЦикла;

Полученное представление решетки возвращается:

    Возврат Решетка;
КонецФункции

Процедура ВывестиРешетку(Решетка) сообщает пользователю значение решетки. В переменной Рез находится результат:

Процедура ВывестиРешетку(Решетка)
    Перем Рез;

Вначале Рез пуст:

    Рез = "";

По всем строкам и столбцам матрицы решетки:

    Для i = 0 По N - 1 Цикл
	Для j = 0 По N - 1 Цикл

Значение ячейки накапливается:

	    Рез = Рез + Решетка[i][j];
	КонецЦикла;

В конце каждой строки помещается терминатор:

	Рез = Рез + ""
	    "";
    КонецЦикла;

Результат сообщается пользователю:

    Сообщить(Рез);
КонецПроцедуры

Функция ПовернутьРешетку(Решетка) производит поворот решетки на 90 градусов по часовой стрелке. В переменной Рез находится результат поворота, i и j служат счетчиками циклов:

Функция ПовернутьРешетку(Решетка)
    Перем Рез;
    Перем i, j;

Создается новый двумерный массив Рез:

    Рез = Новый Массив(N, N);

По всем строкам и столбцам матрицы решетки:

    Для i = 0 По N - 1 Цикл
	Для j = 0 По N - 1 Цикл

Для поворота исходные столбцы становятся строками результата прямо, а строки в прямом порядке становятся столбцами в обратном:

	    Рез[j][N - 1 - i] = Решетка[i][j];
	КонецЦикла;
    КонецЦикла;

Функция возвращает результат:

    Возврат Рез;
КонецФункции

Функция Зашифровать(Решетка, СтрокаИсходная) возвращает результат шифрования исходной строки СтрокаИсходная на основе матрицы Решетка. В переменных СтрокаЗашифрованная располагается зашифрованная строка в виде строки, СтрокаЗашифрованнаяМассив – зашифрованная строка в виде массива, Счетчик – номер текущего рассматриваемого символа исходной строки, ijk – счетчики циклов:

Функция Зашифровать(Решетка, СтрокаИсходная)
    Перем СтрокаЗашифрованная;
    Перем СтрокаЗашифрованнаяМассив;
    Перем Счетчик;
    Перем i, j, k;

Вначале СтрокаЗашифрованная становится пустой строкой, СтрокаЗашифрованнаяМассив – новым двумерным массивом, а Счетчик указывает на не принадлежащий исходной строке номер:

    СтрокаЗашифрованная = "";
    СтрокаЗашифрованнаяМассив = Новый Массив(N, N);
    Счетчик = 0;

Для всех четырех поворотов решетки шифрования по часовой стрелке:

    Для k = 1 По N Цикл

По всем строкам и столбцам матрицы решетки:

	Для i = 0 По N - 1 Цикл
	    Для j = 0 По N - 1 Цикл

Если в решетке в этом месте находится отверстие-окошко, то в результат шифрования в виде матрицы в это место помещается текущий символ исходной строки:

		Если Решетка[i][j] = "*" Тогда
		    Счетчик = Счетчик + 1;
		    СтрокаЗашифрованнаяМассив[i][j] = Сред(СтрокаИсходная, Счетчик, 1);
		КонецЕсли;
	    КонецЦикла;
	КонецЦикла;

Решетка поворачивается:

	Решетка = ПовернутьРешетку(Решетка);
    КонецЦикла;

По всем строкам и столбцам зашифрованной строки в виде матрицы символ из матрицы добавляется к результирующей строке:

    Для i = 0 По N - 1 Цикл
	Для j = 0 По N - 1 Цикл
		    СтрокаЗашифрованная = СтрокаЗашифрованная + СтрокаЗашифрованнаяМассив[i][j];
	КонецЦикла;
    КонецЦикла;

Результат шифрования возвращается:

    Возврат СтрокаЗашифрованная;
КонецФункции

Функция Расшифровать(Решетка, СтрокаЗашифрованная) возвращает результат расшифровывания зашифрованной строки СтрокаЗашифрованная на основе матрицы Решетка.

В переменных СтрокаРасшифрованная располагается расшифрованная строка в виде строки, ijk – счетчики циклов:

Функция Расшифровать(Решетка, СтрокаЗашифрованная)
    Перем СтрокаРасшифрованная;
    Перем i, j, k;

СтрокаРасшифрованная изначально пуста:

    СтрокаРасшифрованная = "";

Для всех четырех поворотов решетки шифрования по часовой стрелке:

    Для k = 1 По N Цикл

По всем строкам и столбцам матрицы решетки:

	Для i = 0 По N - 1 Цикл
	    Для j = 0 По N - 1 Цикл

Если в решетке в этом месте находится отверстие-окошко, то к результату расшифровывания добавляется символ зашифрованной строки, который располагается по координатам этой строки и столбца решетки:

		Если Решетка[i][j] = "*" Тогда
		    СтрокаРасшифрованная = СтрокаРасшифрованная + Сред(СтрокаЗашифрованная, i * N + j + 1, 1);
		КонецЕсли;
	    КонецЦикла;
	КонецЦикла;

Решетка поворачивается:

	Решетка = ПовернутьРешетку(Решетка);
    КонецЦикла;

Расшифрованная строка возвращается:

    Возврат СтрокаРасшифрованная;
КонецФункции

Процедура Главная() выполняет взаимосвязь описанных выше подпрограмм. В переменной Решетка находится решетка шифрования в виде матрицы, СтрокаИсходнаяСтрокаЗашифрованнаяСтрокаРасшифрованная – это соответственно исходная, зашифрованная и расшифрованная строки:

Процедура Главная()
    Перем Решетка;
    Перем СтрокаИсходная, СтрокаЗашифрованная, СтрокаРасшифрованная;

Сначала происходит присваивание N=4, после решетка шифрования преобразуется во внутреннее программное представление, затем решетка сообщается пользователю:

    Инициализация();
    Решетка = ИсходнаяРешетка(".*..*.....*....*");
    ВывестиРешетку(Решетка);

Задается исходная строка, которая вначале шифруется, а затем результат шифрования расшифровывается:

    СтрокаИсходная = "АБВГДЕЁЖЗИЙКЛМНО";
    СтрокаЗашифрованная = Зашифровать(Решетка, СтрокаИсходная);
    СтрокаРасшифрованная = Расшифровать(Решетка, СтрокаЗашифрованная);

Строки исходная, зашифрованная и расшифрованная сообщаются пользователю:

    Сообщить(СтрокаИсходная);
    Сообщить(СтрокаЗашифрованная);
    Сообщить(СтрокаРасшифрованная);
КонецПроцедуры

Происходит вызов Главная():

Главная();

Полный исходный текст программы находится на сайте журнала http://samag.ru, результат работы представлен на рис. 2.

Рисунок 2. Результат работы программы

Рисунок 2. Результат работы программы

Полученный результат дополняет ранее опубликованные в журнале «Системный администратор» программные реализации классических методов шифрования и подходит для ознакомления с основными языковыми конструкциями 1С.

  1. Перельман Я.И. Живая математика / Я.И. Перельман. – М.: Гос. изд. физ.-мат. лит., 1958. – 185 с.
  2. Решетка Кардано // Википедия. URL: https://ru.wikipedia.org/wiki/Решётка_Кардано (дата обращения: 05.12.2018).
  3. Cardan grille // Wikipedia. URL: https://en.wikipedia.org/wiki/Cardan_grille (дата обращения: 05.12.2018).
  4. 1712. Шифровальная решетка // Timus Online Judge. URL: http://acm.timus.ru/print.aspx?space=1&num=1712 (дата обращения: 05.12.2018).

Ключевые слова: решетка Кардано, классические методы шифрования, 1С.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru