В прошлой статье из цикла “Создание своего метода шифрования” мы узнали отличие шифров от кодов , выбрали 2 шифра и скрестили их. Чтобы зашифровать 1-2 предложения не нужно много времени и сил, но что делать если текст, над которым придётся работать состоит из пары 10-ов страниц? В таком случае процесс сокрытия информации надо сделать автоматизированным. Написание не сложной программы по определенному методу шифрования – это как раз то что нам и нужно!
Для написания любой , даже самой пустяковой программы, надо разбить нашу задачу на процедуры и составить алгоритм ( план действий ) по которому наша программа будет обрабатывать данные.
Процедуры
Для того чтобы программа могла начать работать с данными по нашему методу , она должна получить 2 ключа. Ключ №1 — длинной 5 символов , и Ключ №2 — длинной 6 символов. Значит первым действием при запуске нашего приложения должен быть ввод 2 ключей.
- Ввод ключевых слов в систему
Следующим этапом будет ввод текста , который мы будем зашифровывать или , наоборот дешифровывать.
- Ввод текста
Наша программа должна понимать что конкретно ей предстоит сделать. Поэтому кто-бы не пользовался программой , он должен быстро и интуитивно выбирать между шифровкой и дешифровкой.
- Определения дальнейшего направления работы программы
- Получения результата работы программы (используя минимальное кол-во манипуляций)
Итак , мы определили последовательность действий для достижения нужного результата. Что теперь?
Блок-схема алгоритма программы
Если вдруг вы человек далекий от программирования, не пугайтесь, каждая картинка из представленных ниже получит очень подробное описание!
Так как писать программу мы будем в Visual Studio на языке C# , то сейчас разберём только основные 3 процедуры. Почему только 3 ? Потому что это алгоритм шифрования , дешифрования и редактирования (подготовка текста для шифрования). Именно эти 3 алгоритма являются главными , так как писать вашу программу вы можете и на таких структурных язык как Free Pascal , но принцип работы будет один и тот же на любом языке.
Редактирование текста
Процедура очень короткая , и ее реализация на разных языках будет отличаться, поэтому просто скажу что мы должны избавить наш текст от некоторых символов.
- Знаки препинания , Ъ , Ь , пробелы – эти символы удаляем из текста начисто.
- Ё = Е и Й = И. Заменяем эти буквы по всему тексту.
Блок-схема алгоритма шифрования
Как будет происходить замена оригинальных символов в тексте на ключевые ? Сначала мы создадим цикл который будет иметь число повторений = длине нашего текста Далее цикл по длине ключа №2 и внутри него цикл по ключу №1.
Потом используя условие “ если символ текста равен символу из таблицы алфавита” , прибавим к текстовой переменной символ ключа №1 и символ ключа №2 , которые стоят под тем же номером в слове , что и координата символа исходного текста.
Блок-схема алгоритма дешифрования
А теперь самая сложная часть – дешифровка. Казалось бы, чего сложного? Повторение шифрования в обратном порядке! Вот только есть одно но. При расшифровке нам надо 2 символа заменить 1 и сделать это в одном цикле.
Что невозможно т.к. длина ключевых слов у нас разная. Как и в шифровании первой цикл – это цикл от первого до последнего символа. Далее введем две переменные числового типа x и y. X приравняем к 0 (т.к. нумерация идет с 0) а Y зададим значение 1.
Следующим действием проверим наши введенные переменные, чтобы они были меньше чем длинна нашего текста.
Для чего нам эти переменные? В них мы будем хранить номер символа зашифрованного текста, который бы будем сравнивать с символами ключевого слова. X – номер символа для сравнения с ключом столбцов (ключ №1), а Y номер символа для сравнения с ключом строк (ключ №2).
Ключевым изменением в алгоритме дешифровки по сравнению с шифрованием , является подобие параллельности циклов сравнения символов текста с ключами. Сравнивая символы из текста с ключом , при их совпадении, мы будем записывать координату символа в ключе в локальную переменную и прерывать цикл.
Так же , при совпадении символов мы будем прибавлять к переменным 2-ку. Это нужно для того чтобы цикл с ключом строк проверял только 1-ю букву в паре , а цикл с ключом столбцов 2-ю.
При прибавлении 2 — ряд переменной y = 1, 3, 5, 7 ….. ; ряд переменной x = 0, 2, 4, 6 …..
После того как оба цикла были прерваны, по определившимся координатам найдем букву, которая была зашифрована и запишем ее в строку.
В следующей статье , используя составленные блок-схемы, будет написана программа автоматического шифрования и дешифрования. Первая статья этого цикла здесь.