Теория
Шифр Виженера несколько безопаснее шифра Цезаря: в качестве ключа в нем используется слово и его сложно взломать вручную с помощью одного только частотного анализа или перебора. Каждая буква ключа генерирует число, и в результате мы получаем несколько ключей для сдвига букв.
Пример:
p = Meet me in the park at eleven am
В качестве ключевого слова возьмем
k = bacon
Длина сообщения p = 25
В то время как длина k = 5
Поэтому его нужно повторять 5 раз.

Если число букв в сообщении не делится на ключ нацело, мы в последнем применении ключа используем только его часть:

Чтобы найти значение для смещения, используем позиции каждой буквы нашего ключа bacon
в алфавите (от a до z). Считаем с нуля, как истинные программисты. И каждую букву в оригинальном тексте смещаем на заданное число, как в шифре Цезаря, возвращаясь при надобности после Z в начало алфавита. Таким образом, M сместится на 1, первая e вообще не сместится, а вторая сместится на 2 позиции. Ниже вы видите изначальное сообщение, расписанный ключ и результат его применения.

Шифр Виженера, конечно, понадежнее, но если вы знаете длину ключа, его сломать довольно просто. Как её выявить? Если оригинальный текст достаточно длинный, чтобы некоторые слова встречались в нем несколько раз, то вы увидите некоторые повторения:

Также можно использовать полный перебор, но вариантов немало: 26^n – 1
где n
— длина неизвестного ключа. Но обычно это немало. Правда, для компьютера это не проблема.
А теперь математика шифра:
Пусть р
– некоторый текст, k
— ключевое слово, kj
— j
-я буква ключа, pi
— буква под номером i
в оригинальном тексте, ci
— буква под номером i
в шифровке. Тогда:
ci = (pi + kj) % 26
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ