В шифре Цезаря каждая буква алфавита сдвигается на несколько позиций; например в шифре Цезаря при сдвиге +3, A стало бы D, B стало бы E и так далее. Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига.
Wiki: https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
Шифрование шифром Виженера работает следующим образом. Возьмем латинский алфавит, в котором 26 букв, текст, который требуется зашифровать и ключ:
attackatdown
lemonlemonle
Позиция буквы a
в алфавите 0, а позиция l
- 11. Тогда символ в
зашифрованном тексте будет вычисляться как (0 + 11) % 26
что равно
11, т.е. символу l
. Второму символу текста t
соответствует символ
e
из ключа, результатом для них будет (19 + 4) % 26 = 23
, что
соответствует символу x
.
Расшифровка происходит подобным образом: c - n + m
, где c
- код
символа из зашифрованного текста, n
- размер алфавита, m
- код
символа из ключа.
В модуле vigenere_cipher.py
приведен пример реализации такого шифра.