Vigenere Cipher Vigenere Cipher
Simple
EN French RU

Le chiffre de Vigenère est une méthode de chiffrement de textes alphabétiques qui utilise une succession de chiffres de César, basés sur les lettres d'un mot-clé. C'est une forme simple de substitution polyalphabétique.

Pour le chiffre de Vigenère, chaque lettre du message est décalée d'un certain nombre de places dans l'alphabet, et la valeur du décalage dépend de la lettre codée et de sa position dans le texte. Pour coder, on peut utiliser une table des alphabets, appelée tabula recta, carré de Vigenère, ou table de Vigenère. Elle est constituée de 26 lignes qui contiennent l'alphabet décalé circulairement vers la gauche d'un cran par rapport à la ligne précédente. À chaque étape du processus de codage, c'est l'un de ces alphabets décalés qui est choisi, en fonction d'une répétition du mot-clé.

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

Pour visualiser le fonctionnement du chiffre, considérons le message "DONTWORRYBEHAPPY" et le mot-clé "CHECKIO". Il faut ensuite écrire le message, puis les répétitions du mot-clé au-dessous. Enfin, il suffit, par lecture de la table de Vigenère, de décaler chaque lettre du message (portée en colonne) en fonction de la lettre du mot-clé correspondante (portée en ligne).

Message:   DONTWORRYBEHAPPY
Mot-clé:   CHECKIOCHECKIOCH
Codé:      FVRVGWFTFFGRIDRF

Le chiffre de Vigenère peut également être interprété algébriquement. Si les lettres A-Z sont représentées par les nombres 0-25, et que l'on considère l'addition modulo 26, alors le codage de la lettre E en utilisant la clé K peut être traduit par:
C = E(M) = (M + K) % 26

Imaginons à présent le scénario suivant : votre ami et vous utilisez ce chiffre pour correspondre, et vous avez oublié le mot-clé. Mais par chance, il vous reste une sauvegarde d'un message codé et de ce même message décodé. De sorte que vous pouvez reconstituer la clé et décoder le tout nouveau message envoyé par votre ami.

Trois arguments. Un vieux message décodé, ce même message codé, et un nouveau message à décoder, comme chaînes de caractères (string) (unicode pour py2).

Le message décodé comme chaîne de caractères (string).

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

C'est un chiffre simple et très répandu par le passé. Comme on le voit, la clé peut être trouvée facilement si on dispose de quelques informations concernant le message.


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.