Реализация классического метода «Шифр четырех квадратов» в 1С::Журнал СА 10.2018
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г.
Просмотров: 6141
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

 Реализация классического метода «Шифр четырех квадратов» в 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