Шифр Виженера

Шифр Виженера был придуман в 16 веке. Он является одним из вариантов шифра Цезаря. В этом уроке мы напишем программу, которая зашифрует текст с помощью использования ключевого слова.

Содержание статьи

Расшифровать шифр Виженера в Golang

Перед разбором шифра Виженера вспомним принцип работы шифра Цезаря. При использовании шифра Цезаря текстовое сообщение кодируется через перемещение каждой буквы послания на три буквы вперед. Для расшифровки нужно переместить знаки в обратном порядке.

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

Присвоим каждую букву английского алфавита числу, где A = 0, B = 1 и так до Z = 25. С учетом этого сдвиг на 3 знака можно представить буквой D (D = 3).

При расшифровки текста из Таблицы 1 начнем с буквы L и переместим ее на D. Из-за того, что L= 11 и D = 3, результатом 11-3 будет 8, или буква I. При необходимости дешифровать букву А придется вернуться назад, следовательно, она станет буквой Х.

caesar cipher

Шифр Цезаря и ROT13 подвержены так называемому частотному анализу. Буквы, которые часто встречаются в английском языке, например E, также будут часто всплывать в зашифрованном тексте. При поиске шаблонов в зашифрованном тексте код может быть взломан.

Чтобы помешать взломщикам кода, шифр Виженера сдвигает каждую букву на основе повторяющегося ключевого слова, а не постоянного значения вроде 3 или 13. Ключевое слово повторяется до конца сообщения, как показано для ключевого слова GOLANG в Таблице 2.

Теперь, когда вы имеете представление о шифре Виженера, вы можете заметить в шифре Виженера ключевое слово D эквивалентно тому, что в шифре Цезаря. Аналогично, в ROT13 ключевое слово N (N = 13). С помощью более длинных ключевых слов можно добиться определенного преимущества.

шифр виженера

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

  • Функция strings.Repeat может пригодиться. Можем ее использовать, однако в общем и целом в программе не будет использоваться никаких других пакетов, кроме fmt, что нужен для вывода расшифрованного сообщения;
  • Попробуйте написать вариант с range в цикле for, а также вариант без него. Помните, что ключевое слово range делит строку на руны, в то время как результатом индекса вроде keyword[0] является байт.

Помните, что вы можете осуществлять операции только над значениями одинакового типа. В случае необходимости можно конвертировать один тип в другой (string, byte, rune).

Для обхода конца и начала алфавита шифр Цезаря вынуждает нас использовать сравнение. Попробуйте обойтись без операторов if, используя модуль %. Как помните, модуль помогает получить остаток от деления двух чисел. К примеру, результатом 27 % 26 будет 1, придерживайтесь диапазона 0-25. Будьте осторожны с отрицательными числами, ведь результатом -3 % 26 по-прежнему будет -3.

После попытки написать программу самостоятельно можете посмотреть на наш вариант.

Зашифровать текст через шифр Виженера в Golang

Зашифровать текст с помощью шифра Виженера ненамного сложнее процесса его расшифровки. Нужно просто добавить буквы ключевого слова к буквам текстового сообщения вместо их извлечения.

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

Вместо написания каждого символа текстового сообщения в верхнем регистре без пробелов можно задействовать функции strings.Replace и strings.ToUpper, что поможет удалить пробелы и поменять регистр перед зашифровкой текста.

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

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

Используйте ключевое слово «GOLANG» для зашифровки сообщения. Можете проверить свой вариант с нашим решением ниже.

Понравилась статья?

Поддержи наш проект, чтобы мы могли создать больше хорошего контента!