Vigenere Cipher Vigenere Cipher
Simple
EN FR Russian

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

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

\  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 \----------------------------------------------------
A| A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B| B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C| C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D| D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E| E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F| F G H I J K L M N O P Q R S T U V W X Y Z A B C...

Чтобы увидеть как это работает, давайте, возьмем сообщение "DONTWORRYBEHAPPY" и ключевое слово "CHECKIO". Напишем собщение и ниже ключевых слов, затем сдвинем каждую букву в сообщении, связанную соответсвиющей букве в повторяющемся ключевом слове.

Сообщение:       DONTWORRYBEHAPPY
Ключевое слово:  CHECKIOCHECKIOCH
Шифровка:        FVRVGWFTFFGRIDRF

Шифр Виженера может быть рассмотрен алгебраически. Если буквы A–Z принимают значения чисел 0–25, и дополнительно выполняют деление по модулю 26, тогда шифр Виженера E, используя ключ K можно записать как:
C = E(M) = (M + K) % 26

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

Три аргумента. Старое расшифрованное сообщение, старое зашифрованное сообщение и новое зашифрованное сообщение, как строки (unicode для py2).

Новое расшифрованное сообщение.

decode_vigenere('HELLO', 'OIWWC', 'ICP') == "BYE"
    

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


all(re.match("[A-Z]+\Z", text) for text in args)
len(key) ≤ len(old_encrypted)
2 * len(key) <= len(old_encrypted) < len(new_encrypted) or len(new_encrypted) <= len(old_encrypted)

You should be an authorized user in order to see the full description and start solving this mission.