Найти в Дзене
Minecraft things

Как взломать шифр виженера

Оглавление

Получение длины ключа

Способ 1. Перебор.

Первый, и более простой способ это перебор. Заключается он в следующем: сначала берём каждую вторую букву, затем каждую третью, четвертую и т.д.

После каждого забора где-нибудь делаем частотный анализ. Если правильная длина - будет похож на обычный, только со сдвигом(или без если буква а). Проще это автоматизировать, например это можно за 2 минуты написать на питоне.

Способ 2. Тест Касиски.

Как-то так. Он не работает для коротких текстов, но, maybe быстрее. Делается это так: ищем в тексте повторяющиеся последовательности букв. Чем длиннее - тем лучше. Затем вычисляем НОД(наибольший общий делитель) их позиций их первых букв в тексте. У первой букве в тексте позиция 0. Если вдруг НОД равен 1, то поищите среди позиций простые числа и удалите их. Все равно могут быть случайные совпадения, но так лучше.

Далее думаем, какой из делителей НОД. Может быть длиной ключа. Например, если НОД равен 15, а шифротекст вы получили от родственника, с помощью которого практикуетесь, то скорее всего этот родственник использовал осмысленное слово, причём средней длины, так что длина ключа скорее всего 5.

А когда и это закончим, смотрим 2 последних шага способа 1.

Получение самого ключа

После подбора длины берём сначала, каждые n-ные буквы(n - длина ключа), затем номер которых при делении оставляет остаток 1, 2, ..., n-1. Это гораздо лучше автоматизировать.

Когда получили все строки - делаем каждой частотный анализ и подбираем сдвиги, как для шифра цезаря. Номер буквы в алфавите будет равен нужному сдвигу плюс 1.

Итого

??-???-???? минут. А если честно, я ещё знаю всё это только в теории(

Наука
7 млн интересуются