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г.
Просмотров: 9593
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

 Реализация классического метода «Шифр четырех квадратов» в 1С

Архив номеров / 2018 / Выпуск №10 (191) / Реализация классического метода «Шифр четырех квадратов» в 1С

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

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

Реализация классического метода
«Шифр четырех квадратов» в 1С

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

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

Интересными в этом плане задачами являются те, что связаны с классическими алгоритмами и методами криптографии [1]. Один из таких – метод «Шифр четырех квадратов» [2, 3]. Его программная реализация в 1С дополнит существующие решения по другим способам шифрования [4].

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

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

Перед процедурами шифрования и дешифрования должно быть выполнено формирование матрицы, содержащей четыре квадрата.

  • Левый верхний и правый нижний квадраты формируются на основе алфавита путем заполнения всех ячеек слева направо сверху вниз символами алфавита.
  • Правый верхний квадрат формируется на основе первого пароля.
  • Левый нижний квадрат формируется на основе второго пароля

Алгоритм:

  • Вначале символы паролей приводятся к верхнему регистру.
  • Затем исключаются все символы, не входящие в алфавит, после – все уже ранее встретившиеся в пароле.
  • Получившиеся символы пароля записываются в ячейки нужного квадрата слева направо сверху вниз.
  • Оставшиеся незаполненными символами ячейки заполняются неиспользованными символами алфавита.

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

Разработаем модуль управляемого приложения, который осуществляет шифрование и дешифрование

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

По каждой паре символов левый и правый символы в соответственно левом верхнем и правом нижнем квадратах становятся вершинами прямоугольника.

В противоположных по горизонтали от этих символов ячейках квадрата открытого текста лежат символы шифрованного текста.

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

Для иллюстрации шифрования пары символов на рис. 1 и 2 изображается координатная сетка, иллюстрирующая соответствие индексов для формирования четырех квадратов для последующего шифрования и дешифрования.

Рисунок 1. Действие «Зашифровать» Рисунок 2. Действие «Расшифровать»
Рисунок 1. Действие «Зашифровать» Рисунок 2. Действие «Расшифровать»

На рис. 1: I – зашифрованный левый символ в паре, II – зашифрованный правый символ в паре.

На рис. 2: I – расшифрованный левый символ в паре, II – расшифрованный правый символ в паре.

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

Определяются переменные, которые будут доступны всем подпрограммам:

  • Размер содержит сторону квадрата,
  • Алфавит – строка, содержащая все возможные символы, которые участвуют в шифровании,
  • Матрица – двумерный массив для хранения четырех квадратов.
Перем Размер, Алфавит, Матрица;

Первой подпрограммой является Инициализация(), которая присваивает конкретные значения переменным Размер и Алфавит:

Процедура Инициализация()
    Размер = 5;
    Алфавит = "ABCDEFGHIJKLMNOPRSTUVWXYZ";
КонецПроцедуры

Следующей является ОграничитьсяАлфавитом(текст). Единственный аргумент текст – это строка, символы которой будут переведены в верхний регистр, а затем из их числа исключены все не входящие в алфавит.

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

Функция ОграничитьсяАлфавитом(текст)
    Перем ТекстПрописные, Результат, Символ, i;
    Результат = "";
    ТекстПрописные = ВРег(текст);

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

    Для i = 1 По СтрДлина(ТекстПрописные) Цикл
	Символ = Сред(ТекстПрописные, i, 1);
	Если Найти(Алфавит, Символ) <> 0 Тогда
	    Результат = Результат + Символ;
	КонецЕсли;
    КонецЦикла;

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

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

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

Функция Дополнить(текст)
    Перем Врем, Результат, Символ, i;
    Результат = "";
    Врем = текст + Алфавит;

По всем символам временной строки, если символ не содержится в результате, то он конкатенируется с результатом:

    Для i = 1 По СтрДлина(Врем) Цикл
	Символ = Сред(Врем, i, 1);
	Если Найти(Результат, Символ) = 0 Тогда
	    Результат = Результат + Символ;
	КонецЕсли;
    КонецЦикла;

Строка для заполнения квадрата возвращается:

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

Процедура СоздатьМатрицу(пароль1, пароль2) создает матрицу, в которой содержатся четыре квадрата. В переменных ПарольДляМатрицы1 и ПарольДляМатрицы2 содержатся пароли, на основании которых можно сформировать квадраты, в i и j – счетчики циклов:

Процедура СоздатьМатрицу(пароль1, пароль2)
    Перем ПарольДляМатрицы1, ПарольДляМатрицы2;
    Перем i, j;

Создается Матрица – новый двумерный массив, который по размерам подходит для хранения четырех квадратов. Формируются пароли для матрицы, для этого исходные пароли, во-первых, ограничиваются применяемым алфавитом, а во-вторых, дополняются символами алфавита для заполнения квадрата:

    Матрица = Новый Массив(Размер + Размер, Размер + Размер);
    ПарольДляМатрицы1 = Дополнить(ОграничитьсяАлфавитом(пароль1));
    ПарольДляМатрицы2 = Дополнить(ОграничитьсяАлфавитом(пароль2));

Теперь происходит непосредственно заполнение четырех квадратов. По каждой ячейке отдельного квадрата:

    Для i = 0 По Размер - 1 Цикл
	Для j = 0 По Размер - 1 Цикл

Учитывая расположение отдельных квадратов в матрице, присваивается соответственно ячейкам левого верхнего квадрата – символы алфавита, правого нижнего – также символы алфавита, правого верхнего – первый пароль, левого нижнего – второй пароль:

	    Матрица[i][j] = Сред(Алфавит, i * Размер + j + 1, 1);
	    Матрица[i + Размер][j + Размер] = Сред(Алфавит, i * Размер + j + 1, 1);
	    Матрица[i][j + Размер] = Сред(ПарольДляМатрицы1, i * Размер + j + 1, 1);
	    Матрица[i + Размер][j] = Сред(ПарольДляМатрицы2, i * Размер + j + 1, 1);

Циклы повторяются по всем ячейкам и процедура завершается.

	КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Функция Зашифровать(текст) возвращает зашифрованный текст. В переменной Результат помещается результирующий шифрованный текст, ТекстДляМатрицы – ограниченный алфавитом и дополненный до четного числа символов не шифрованный текст, x1 и y1 – координаты нечетного по порядку символа исходного текста в матрице, относящейся к левому верхнему квадрату, x2 и y2 – координаты четного по порядку символа исходного текста в матрице, относящейся к правому нижнему квадрату, ij и k – счетчики циклов:

Функция Зашифровать(текст)
    Перем Результат, ТекстДляМатрицы;
    Перем x1, y1, x2, y2;
    Перем i, j, k;

Вначале результат пуст, а в ТекстДляМатрицы помещается ограниченный алфавитом и дополненный до четного числа символов открытый текст:

    Результат = "";
    ТекстДляМатрицы = ОграничитьсяАлфавитом(текст);
    Если СтрДлина(ТекстДляМатрицы) % 2 <> 0 Тогда
	ТекстДляМатрицы = ТекстДляМатрицы + "X";
    КонецЕсли;

По всем парам символов в строке для шифрования выделяются левый символ Символ1, нечетный по порядку, и правый символ Символ2, четный по порядку:

    Для k = 1 По Цел(СтрДлина(ТекстДляМатрицы) / 2) Цикл
	Символ1 = Сред(ТекстДляМатрицы, 2 * k - 1, 1);
	Символ2 = Сред(ТекстДляМатрицы, 2 * k, 1);

Для определения координат символов в матрице эти координаты изначально равны нулю:

	y1 = 0;
	x1 = 0;
	y2 = 0;
	x2 = 0;

По всем ячейкам матрицы, соответствующим левому верхнему и правому нижнему квадрату. Если в левом верхнем квадрате найден первый символ, то запоминается его местоположение в матрице:

	Для i = 0 По Размер - 1 Цикл
	    Для j = 0 По Размер - 1 Цикл
		Если Матрица[i][j] = Символ1 Тогда
		    y1 = i;
		    x1 = j;
		КонецЕсли;

Если в правом нижнем квадрате найден второй символ, то запоминается его местоположение в матрице:

		Если Матрица[i + Размер][j + Размер] = Символ2 Тогда
			    y2 = i + Размер;
			    x2 = j + Размер;
		КонецЕсли;
	    КонецЦикла;
	КонецЦикла;

По координатам в соответствии с рис. 1 определяются зашифрованные символы, которые конкатенируются с результатом:

	Результат = Результат + Матрица[y1][x2] + Матрица[y2][x1];
    КонецЦикла;

Результат возвращается:

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

Функция Расшифровать(текст) выполняет расшифровку зашифрованного текста из аргумента текст. В переменной Результат помещается результирующий расшифрованный текст, ТекстДляМатрицы – ограниченный алфавитом и дополненный до четного числа символов зашифрованный текст, x1 и y1 – координаты нечетного по порядку символа зашифрованного текста в матрице, относящейся к левому верхнему квадрату, x2 и y2 – координаты четного по порядку символа зашифрованного текста в матрице, относящейся к правому нижнему квадрату, ij и k – счетчики циклов:

Функция Расшифровать(текст)
    Перем Результат, ТекстДляМатрицы;
    Перем x1, y1, x2, y2;
    Перем i, j, k;

Результат изначально пуст, а в ТекстДляМатрицы помещается, чтобы избежать ошибок, ограниченный алфавитом и дополненный до четного числа символов зашифрованный текст, два последних символа которого в случае ошибки будут неверны:

    Результат = "";
    ТекстДляМатрицы = ОграничитьсяАлфавитом(текст);
    Если СтрДлина(ТекстДляМатрицы) % 2 <> 0 Тогда
	ТекстДляМатрицы = ТекстДляМатрицы + "X";
    КонецЕсли;

Далее по всем парам наших символов в строке для расшифровывания выделяются левый символ Символ1, нечетный по порядку, и правый символ Символ2, четный по порядку:

    Для k = 1 По Цел(СтрДлина(ТекстДляМатрицы) / 2) Цикл
	Символ1 = Сред(ТекстДляМатрицы, 2 * k - 1, 1);
	Символ2 = Сред(ТекстДляМатрицы, 2 * k, 1);

Для определения координат символов в матрице эти координаты изначально равны нулю:

	y1 = 0;
	x1 = 0;
	y2 = 0;
	x2 = 0;

Теперь пройдемся по всем ячейкам матрицы, соответствующим правому верхнему и левому нижнему квадрату. Если же в правом верхнем квадрате будет найден первый символ, то далее запоминается его местоположение в матрице:

	Для i = 0 По Размер - 1 Цикл
	    Для j = 0 По Размер - 1 Цикл
		Если Матрица[i][j + Размер] = Символ1 Тогда
		    y1 = i;
		    x1 = j + Размер;
		КонецЕсли;

Если в левом нижнем квадрате найден второй символ, то запоминается его местоположение в матрице:

		Если Матрица[i + Размер][j] = Символ2 Тогда
		    y2 = i + Размер;
		    x2 = j;
		КонецЕсли;
	    КонецЦикла;
	КонецЦикла;

По координатам в соответствии с рис. 2 определяются расшифрованные символы, которые конкатенируются с результатом:

	Результат = Результат + Матрица[y1][x2] + Матрица[y2][x1];
    КонецЦикла;

Результат возвращается:

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

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

Процедура ПечатьДвумерногоМассива(массив)
    Перем Результат;
    Перем i, j;
    Результат = "";

По всем строкам массива для каждой ячейке в строке ее содержимое конкатенируется с результатом:

    Для i = 0 По массив.Количество() - 1 Цикл
	Для j = 0 По массив[0].Количество() - 1 Цикл
	    Результат = Результат + " " + массив[i][j];
	КонецЦикла;

В конец строки добавляется терминатор:

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

Пользователю сообщается результат:

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

Процедура Главная() осуществляет взаимосвязь остальных подпрограмм.

Переменные пароль1 и пароль2 хранят первый и второй пароли, СтрокаИсходнаяСтрокаЗашифрованнаяСтрокаРасшифрованная – исходную, зашифрованную и расшифрованную строки:

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

Происходит инициализация переменных:

    Инициализация();

Присваиваются текущие пароли:

    пароль1 = "Example";
    пароль2 = "SAMAG";

Создается матрица с четырьмя квадратами:

    СоздатьМатрицу(пароль1, пароль2);

Происходит шифрование и дешифрование:

    СтрокаИсходная = "http://samag.ru/";
    СтрокаЗашифрованная = Зашифровать(СтрокаИсходная);
    СтрокаРасшифрованная = Расшифровать(СтрокаЗашифрованная);

Отображаются рабочие переменные:

    Сообщить(Алфавит);
    Сообщить(пароль1);
    Сообщить(пароль2);
    ПечатьДвумерногоМассива(Матрица);

и результаты работы:

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

Происходит вызов головной процедуры:

Главная();

Полный текст программы можно скачать на сайте http://samag.ru.

Результаты работы программы:

ABCDEFGHIJKLMNOPRSTUVWXYZ

Example
SAMAG
 A B C D E E X A M P
 F G H I J L B C D F
 K L M N O G H I J K
 P R S T U N O R S T
 V W X Y Z U V W Y Z
 S A M G B A B C D E
 C D E F H F G H I J
 I J K L N K L M N O
 O P R T U P R S T U
 V W X Y Z V W X Y Z

http://samag.ru/
DRNTNMGMBPRZ
HTTPSAMAGRUX
ABCDEFGHIJKLMNOPRSTUVWXYZ

Example
SAMAG
 A B C D E E X A M P
 F G H I J L B C D F
 K L M N O G H I J K
 P R S T U N O R S T
 V W X Y Z U V W Y Z
 S A M G B A B C D E
 C D E F H F G H I J
 I J K L N K L M N O
 O P R T U P R S T U
 V W X Y Z V W X Y Z

Kirill Stanislavovich Tkachenko
JCSDHJSRMICTGAZIYCAENLASFMGLIZ
KIRILLSTANISLAVOVICHTKACHENKOX

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

  1. Жельников В. Криптография от папируса до компьютера / В. Жельников. – М.: ABF, 1996. – 335 с. ISBN 5-87484-054-0.
  2. Four-square cipher // Wikipedia. URL: https://en.wikipedia.org/wiki/Four-square_cipher (дата обращения: 29.08.2018).
  3. Шифр четырех квадратов // Википедия. URL: https://ru.wikipedia.org/wiki/Шифр_четырех_квадратов (дата обращения: 29.08.2018).
  4. Ткаченко К. Программная реализация энигмоподобной системы в среде 1С. // «Системный администратор», № 4, 2017 г. – С. 72-74. ISSN 1813-5579. URL: http://samag.ru/archive/article/3414 (дата обращения: 29.08.2018).

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


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

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

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

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

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