Шифрование из олимпиадной задачки

Нашел свою старую статью по криптографии, решил расписать ее на простом языке.

Суть в чем?

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

Рандомная задачка из олимпиады

Задача

Из-за своей лени занятости я взял самую простую, на мой взгляд, задачу. Собственно вот она.

Задача

Убив на нее пол дня, нашел закономерность. Каждый зеленый кружок соответствует пропуску буквы, а каждый красный соответствует концу строки.

Закономерность

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

Решение задачи

Алгоритм

Суть проста. Создаем квадрат (матрицу) из исходного текста и задаем параметры шифрования:

  1. Ширина квадрата
  2. Высота квадрата
  3. Зеленые кружки - отступы
  4. Красные кружки - переносы

Программа для шифрования

На выходе получаем шифротекст. Шифротекст в задаче и в программе не совпадают т.к. заданы другие параметры не как в задаче.

Альтернативный алгоритм

Если предыдущий алгоритм можно использовать для криптографии, то этот будет хорош в стего. Суть такая же. Задаем исходную строку в которой используются какие-либо данные. У меня это координаты.

Стеганография координат

Можно выбрать шаблон для необходимых данных. Задается с помощью регулярок.

Шаблон для выборки данных

Ну и все. Дальше дело за малым. Вводим нужный текст и задаем отступы. Вуоля. Координаты поменялись.

Дальнейшая судьба

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

Кому понадобится ссылка на исходники: https://github.com/patriciasmashp/encrypter.git