====== Chiffre de Vigenère ======
{{ vigenere.jpg?nolink&200|}}
Il s'agit d'une méthode décrite par le diplomate [[https://fr.wikipedia.org/wiki/Blaise_de_Vigen%C3%A8re|Blaise de Vigenère]] dans son //traité sur les chiffres// paru en 1583. C'est une version plus complexe du [[nsi:tds:cryptographie:chiffre_cesar|Chiffre de César]] et c'est un chiffre symétrique.
{{page>nsi:terminales:securite:chiffrement_symetrique_asymetrique#Chiffre symétrique}}
===== Méthode =====
Dans le chiffre de César, on décalait l'alphabet d'une certaine quantité. Dans le chiffre de Vigenère on fait de même mais le décalage change à chaque lettre. La clé n'est pas un simple nombre mais un mot ou une phrase.
==== Exemple ====
**Message :** De famille connue, et noble depuis le quinzieme siecle, son pere, Jean, controleur ordinaire des guerres, lui fait donner une education classique tres poussee, l’envoyant pour cela a Paris.
//J'ai retiré les accents.//
**Clé :** VIGENERE
On parcours la clé et le message simultanément.
- 1ère lettre de la clé V. On applique un décalage A -> V. La première lettre du message, D -> Y
- 2e, I => décalage A -> I. La 2e lettre du message E -> M
- 3e, G => décalage A -> G. La 3e lettre du message (ignore l'espace) F -> L
- 4e, E => décalage A -> E. La 4e lettre du message A -> E
- 5e, N => décalage A -> N. La 5e lettre du message M -> Z
- 6e, E => décalage A -> E. La 6e lettre du message I -> M
- 7e, R => décalage A -> R. La 7e lettre du message L -> C
- 8e, E => décalage A -> E. La 8e lettre du message L -> P
- 9e, on recommence à V => décalage A -> V. La 9e lettre du message E -> Z
- ...
**Message chiffré :** Ym lezmcpz kurayv, io vufyi uikcow yi hydvfmrqv wdmipr, wfr kmxi, Wirr, xwtxescipz uvqmeedzk hrw xyzzxif, plm aiox qserzz arr iuyxizmbr tpvaymdyv xmmy tbyjwzm, r’iazfcvvz tbyi gztg e Ceimn.
==== Déchiffrement ====
Même principe mais dans l'autre sens.
- 1ère lettre de la clé V. On applique un décalage V -> A. La première lettre du message, Y -> D
- 2e, I => décalage I -> A. La 2e lettre du message M -> E
- ...
===== À faire =====
{{page>nsi:tds:cryptographie:chiffre_cesar#Fonction shift_letter}}
Cette fonction est identique à celle vue dans le [[nsi:tds:cryptographie:chiffre_cesar|chiffre de César]]. Vous pouvez la reprendre si vous l'avez déjà faite.
Pour réaliser un décalage A -> I il suffit de choisir ''%%n = ord('I') - ord('A')%%''.
==== Fonction cypher ====
Vous devez écrire en Python une fonction ''%%cypher(text, clé)%%''
* ''text'' est la chaîne de caractère à chiffrer. De préférence, des majuscules et des caractères de ponctuation,
* ''clé'' est le texte clé, en majuscule sans accent,
* renvoie le texte chiffré.
==== Fonction decypher ====
Vous devez écrire en Python une fonction ''%%decypher(crypted, clé)%%''
* ''crypted'' est la chaîne de caractère du texte chiffré,
* ''clé'' est le texte clé, en majuscule sans accent,
* renvoie le texte déchiffré.
==== Test ====
Pour vérifier le bon fonctionnement :
# message de Alice à Bob
crypted = cypher("BOB, PENSE A ACHETER DES TOMATES.", "POIREAU")
print(crypted)
# réponse chiffrée de Bob
message_reponse = decypher("EOA UI PLDPTVQE, D'TB XIINXH HZFMS EXZWJ.", "POIREAU")
print(message_reponse)