С подготовительным этапом мы разобрались, а теперь рассмотрим непосредственно сам процесс преобразования текста сообщения. Здесь переменная Cnt отвечает за то, какую часть очередной группы букв уже обработали. Если она равна количеству чисел в перестановке, то происходит переход к очередной группе букв сообщения. Алгоритм преобразования усложняется тем, что строки текста не обязательно кратны количеству чисел в перестановке. Поэтому для удобства мы написали функцию GetLine, получающую часть сообщения с указанной позиции в виде одной строки определенной длины, которая при необходимости склеена из нескольких подряд идущих строк. Теперь нам ничего не мешает заменить очередную букву сообщения соответствующей буквой из полученной строки. Результат работы приложения приведен на рис. 12.4.
Рис. 12.4. Результат работы приложения «Т ранспозиция с фиксированным периодом»
12.4. Шифр Виженера и его варианты
Ключ в шифре Виженера задается набором из
Таблица 12.1
. Шифр Виженера с ключом ПБЕ
Шифр Виженера с периодом 1 называется шифром Цезаря. По сути, он представляет собой простую подстановку, в которой каждая буква некоторого сообщения
Если используется шифр Виженера с неограниченным неповторяющимся ключом, то мы имеем шифр Вернама, в котором й =
Теперь перейдем к примеру. Рассмотрим одну из возможных реализаций шифра Цезаря. Как обычно, создадим новое приложение и, по аналогии с предыдущим примером, разместим на форме такие же компоненты. У вас получится приблизительно следующее приложение (рис. 12.5).
Рис. 12.5. Интерфейс приложения «Шифр Цезаря»
Текстовое поле имеет имя edKey и предназначено для задания ключа, при помощи которого будет происходить процесс шифрования или дешифрования. Остальная часть интерфейса программы нам знакома, поэтому останавливаться на ней повторно не имеет смысла. Перейдем к рассмотрению исходного кода программы. Объявление необходимых типов, описание классов и переменных приведено в листинге 12.13.