Энигмоподобная система на школьном алгоритмическом языке::Журнал СА 9.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г.
Просмотров: 6229
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

 Энигмоподобная система на школьном алгоритмическом языке

Архив номеров / 2018 / Выпуск №9 (190) / Энигмоподобная система на школьном алгоритмическом языке

Рубрика: Карьера/Образование /  Кафедра   | Дополнительные материалы

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

Энигмоподобная система
на школьном алгоритмическом языке

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

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

Шифровальные машины типа «Энигма» достаточно известны [1]. При этом их программная реализация имеет относительно небольшую сложность [1, 2]. Чтобы обеспечить воспроизводимость для различных систем и языков программирования, в качестве генератора псевдослучайных чисел (ГПСЧ) можно использовать линейный конгруэнтный метод [3]. Стоит отметить, что на языке 1С имеется программная реализация [4].

Не повторяясь [1, 2, 4], вкратце можно описать энигмоподобную систему следующим образом.

Шифрование осуществляется символ за символом. Для шифрования и дешифрования используется конечное число колес. Входной алфавит и алфавит, нанесенный на колеса, совпадают. На колеса символы алфавита нанесены в случайном порядке, который задан ключом шифрования и алгоритмом формирования ГПСЧ.

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

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

Вначале программы определяются константы и переменные. В константах Алфавит находится используемый для шифрования и дешифрования алфавит, в МаксНомерКолеса – наибольший номер колеса при нумерации с нуля, МаксНомерСимвола – наибольший номер символа при нумерации с нуля. Переменная СемяГПСЧ, хранящая текущее значение ГПСЧ, инициализируется нулем:

лит Алфавит = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
цел МаксНомерКолеса = 6;
цел МаксНомерСимвола = 32;
цел СемяГПСЧ = 0;

Главный алгоритм Энигма начинается с определения переменных.

В двумерном массиве Ротор помещаются шифровальные колеса, его строки соответствуют отдельным колесам, а столбцы – отдельным символам.

В целочисленной переменной МойКлюч располагается текущее значение ключа.

В строках СтрокаИсходнаяСтрокаЗашифрованнаяСтрокаРасшифрованная находятся значения соответственно для исходной, зашифрованной и расшифрованной строк.

Целочисленные переменные ijkl хранят значения счетчиков циклов и индексов элементов массивов:

алг Энигма
нач
    цел таб Ротор[0 : МаксНомерКолеса, 0 : МаксНомерСимвола];
    цел МойКлюч;
    лит СтрокаИсходная;
    лит СтрокаЗашифрованная;
    лит СтрокаРасшифрованная;
    цел i, j, k, l;

Вначале происходит инициализация значения ключа МойКлюч и строки для шифрования СтрокаИсходная. Переменным СтрокаЗашифрованная и СтрокаРасшифрованная присваивается значение пустой строки:

    МойКлюч := 1;
    СтрокаИсходная := "ААААААААМАМАМЫЛАРАМУАААААААА";
    СтрокаЗашифрованная := "";
    СтрокаРасшифрованная := "";

Для шифрования вызовом подпрограммы НовыйРотор создается новый ротор для значения ключа МойКлюч. Для каждого исходного символа с позицией i в исходной строке определяется его порядковый номер в используемом алфавите k:

    НовыйРотор(МойКлюч, Ротор);
    нц для i от 1 до длин(СтрокаИсходная)
	k := АлфавитНомер(СтрокаИсходная[i]);

Затем по всем колесам в роторе от 0 до МаксНомерКолеса происходит прогонка номера символа через каждое колесо в прямом порядке, а именно номер символа в следующем колесе определяется из ячейки рассматриваемого колеса потекущему номеру:

	нц для j от 0 до МаксНомерКолеса
	    k := Ротор[j, k];
	кц

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

	СтрокаЗашифрованная := СтрокаЗашифрованная + Алфавит[k + 1];
	Поворот(Ротор);
    кц

Для дешифрования вызовом подпрограммы НовыйРотор создается новый ротор для значения ключа МойКлюч.

Для каждого зашифрованного символа с позицией i в зашифрованной строке определяется его порядковый номер в используемом алфавите k:

    НовыйРотор(МойКлюч, Ротор);
    нц для i от 1 до длин(СтрокаЗашифрованная)
	k := АлфавитНомер(СтрокаЗашифрованная[i]);

Затем по всем колесам в роторе от МаксНомерКолеса до 0 происходит прогонка номера символа через каждое колесо в обратном порядке.

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

	нц для j от МаксНомерКолеса до 0 шаг -1
	    нц для l от 0 до МаксНомерСимвола
		если Ротор[j, l] = k
		    то
			k := l;
			выход
		все
	    кц
	кц

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

	СтрокаРасшифрованная := СтрокаРасшифрованная + Алфавит[k + 1];
	Поворот(Ротор);
    кц

На стандартное устройство вывода отображаются строки исходная, зашифрованная и расшифрованная, алгоритм завершается:

    вывод СтрокаИсходная, нс;
    вывод СтрокаЗашифрованная, нс;
    вывод СтрокаРасшифрованная, нс;
кон

Подпрограмма НовыйРотор служит для создания и пересоздания нового ротора. В целочисленный аргумент МойКлюч, на основе которого колеса ротора заполняются, эта величина помещается в семя генератора псевдослучайных чисел СемяГПСЧ. Ротор помещается в результат Ротор. Целочисленные переменные ijt1t2 хранят в себе значения счетчиков циклов и индексы.

алг НовыйРотор(цел МойКлюч, рез цел таб Ротор[0 : МаксНомерКолеса, 0 : МаксНомерСимвола])
нач
	цел i, j;
	цел t1, t2;
	СемяГПСЧ := МойКлюч;

Для всех колес ротора каждому символу присваивается его номер по умолчанию, который соответствует порядковому номеру:

    нц для i от 0 до МаксНомерКолеса
	нц для j от 0 до МаксНомерСимвола
	    Ротор[i, j] := j;
	кц

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

	нц для j от 0 до МаксНомерСимвола
	    t1 := int(ГПСЧ * МаксНомерСимвола);
	    t2 := Ротор[i, j];
	    Ротор[i, j] := Ротор[i, t1];
	    Ротор[i, t1] := t2;
	кц
    кц
кон

Следующая подпрограмма Поворот осуществляет поворот колес ротора.

Аргумент-результат Ротор содержит колеса ротора для поворота. Целочисленные переменные ij – счетчики циклов, t – временная.

По всем колесам ротора:

алг Поворот(аргрез цел таб Ротор[0 : МаксНомерКолеса, 0 : МаксНомерСимвола])
нач
    цел i, j, t;
    нц для i от 0 до МаксНомерКолеса

Первый символ по порядку i-м колесе сохраняется, затем все последующие элементы сдвигаются в порядке уменьшения номеров, и на место последнего помещается первый символ:

	t := Ротор[i, 0];
	нц для j от 1 до МаксНомерСимвола
	    Ротор[i, j - 1] := Ротор[i, j];
	кц
	Ротор[i, МаксНомерСимвола] := t;
    кц
кон

Подпрограмма ГПСЧ возвращает вещественное псевдослучайное число по равномерному закону распределения. Используется линейный конгруэнтный генератор, коэффициенты взяты из [3], выбор малых значений коэффициентов обусловлен необходимостью невыхода за разрядную сетку:

алг вещ ГПСЧ
нач
    СемяГПСЧ := mod(106 * СемяГПСЧ + 1283, 6075);
    знач := СемяГПСЧ / 6075.0;
кон

Последняя подпрограмма АлфавитНомер возвращает номер символа в используемом для шифрования и дешифрования алфавите. Аргумент а содержит код искомого символа. Целочисленные переменные kl играют роль индексов и счетчиков. Начальное значение возвращаемого индекса k – нуль.

алг цел АлфавитНомер(сим а)
нач
    цел k, l;
    k := 0;

По всем возможным символам в алфавите:

    нц для l от 0 до МаксНомерСимвола

Если найден символ, то индекс фиксируется, цикл прерывается:

	если Алфавит[l + 1] = а
	    то
		k := l;
		выход
	все
    кц

Индекс возвращается:

    знач := k;

кон

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

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

ААААААААМАМАМЫЛАРАМУАААААААА
ЧЩОФЭКФШВЩЮКЪЕТЪЖЗЛШЦОСЯШГОС
ААААААААМАМАМЫЛАРАМУАААААААА

ББББББББМАМАМЫЛАРАМУББББББББ
АЙЭИКЪЮЭВЩЮКЪЕТЪЖЗЛШЯЬИЛЬЖЛЫ
ББББББББМАМАМЫЛАРАМУББББББББ

ВВВВВВВВМАМАМЫЛАРАМУВВВВВВВВ
ЫЬЬГАДТЪВЩЮКЪЕТЪЖЗЛШЗЛФЕЛЁГЩ
ВВВВВВВВМАМАМЫЛАРАМУВВВВВВВВ

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

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

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

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

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

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

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