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

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

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

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

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

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

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

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

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

Учитесь убеждать и побеждать

Издательство «БХВ», как всегда, порадовало своих читателей хорошими книжными новинками. Кроме популярных

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

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

С увеличением числа сотрудников, работающих из дома, организации сталкиваются с необходимостью создания

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

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

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

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

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

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

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

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

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

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

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

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

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

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

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

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

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

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

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

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

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

 Программная реализация в 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