Шифр Виженера: шифрование, расшифровка и взлом

Зашифруйте или расшифруйте текст шифром Виженера с ключевым словом на русском или латинском алфавите и посмотрите пошаговую таблицу замены. Режим взлома найдёт длину ключа по индексу совпадений и восстановит сам ключ частотным анализом — без знания ключа.

Режим
Результат

Пошаговая замена

Рекламный блок «после калькулятора» (ads/after-calc.html)

Как работает шифр Виженера

Шифр Виженера — многоалфавитный шифр замены. Под текстом многократно подписывают ключевое слово, и каждая буква сдвигается на номер стоящей под ней буквы ключа (А — сдвиг 0, Б — 1 и так далее):

Ci = (Pi + Ki mod m) mod n; Pi = (Ci − Ki mod m) mod n

где m — длина ключа, n — число букв алфавита. Пробелы и знаки препинания не шифруются и не расходуют буквы ключа. Фактически это m шифров Цезаря, которые чередуются от буквы к букве.

Пример

Зашифруем слово «шифр» ключом «ключ» (алфавит из 33 букв): Ш + К = Ш(25) + 11 = 36 mod 33 = 3 → Г; И + Л = 9 + 12 = 21 → Ф; Ф + Ю = 21 + 31 = 52 mod 33 = 19 → Т; Р + Ч = 17 + 24 = 41 mod 33 = 8 → З. Шифротекст — «гфтз». Номера букв здесь считаются с нуля.

Рекламный блок «внутри статьи» (ads/in-article.html)

Как взламывают шифр Виженера

Три века шифр считался «неразгаданным», пока в XIX веке Чарльз Бэббидж и Фридрих Касиски не нашли способ его вскрыть. Слабость — повторение ключа.

  1. Длина ключа. Если разбить шифротекст на m столбцов (каждая m-я буква), то при правильной длине ключа каждый столбец зашифрован одним сдвигом и сохраняет статистику языка. Это видно по индексу совпадений — вероятности того, что две случайные буквы совпадут: для русского текста он около 0,055, для случайных букв — 1/33 ≈ 0,030.
  2. Буквы ключа. Каждый столбец — это шифр Цезаря. Для него перебирают все сдвиги и выбирают тот, при котором частоты букв ближе всего к языковым (минимум χ²).

Чем длиннее текст и короче ключ, тем надёжнее взлом. Если ключ так же длинен, как сам текст, случаен и используется один раз, получается одноразовый блокнот (шифр Вернама) — его взломать невозможно.

Рекламный блок «внизу страницы» (ads/bottom.html)