Outils pour utilisateurs

Outils du site


nsi:tds:cryptographie:chiffre_vigenere

Chiffre de Vigenère

Il s'agit d'une méthode décrite par le diplomate Blaise de Vigenère dans son traité sur les chiffres paru en 1583. C'est une version plus complexe du Chiffre de César et c'est un chiffre symétrique.

Chiffre symétrique

Chiffre : ensemble de règles permettant de transformer un message de sa version lisible en une version illisible.

Chiffrer / Déchiffrer : Utiliser le chiffre dans un sens ou dans l'autre.

Clé : Paramètres de réglage du chiffre choisi.

Alice et Bob utilisent une technique de chiffrement / déchiffrement. Tous les deux utilisent la même clé KK pour key. On parle alors de chiffrement symétrique.

Plutôt que de parler de A qui communique avec B, l'usage est de parler d'Alice qui communique avec Bob. On envisage parfois un espion essayant d'intercepter le message. En anglais espionnage = eavesdropping, ce qui conduit à l'usage de parler d'Eve, l'espionne.

Problème : Alice et Bob ont dû échanger cette clé et ils ont intérêt à en changer régulièrement.

2021/07/05 17:14 · goupillwiki

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. 1ère lettre de la clé V. On applique un décalage A → V. La première lettre du message, D → Y
  2. 2e, I ⇒ décalage A → I. La 2e lettre du message E → M
  3. 3e, G ⇒ décalage A → G. La 3e lettre du message (ignore l'espace) F → L
  4. 4e, E ⇒ décalage A → E. La 4e lettre du message A → E
  5. 5e, N ⇒ décalage A → N. La 5e lettre du message M → Z
  6. 6e, E ⇒ décalage A → E. La 6e lettre du message I → M
  7. 7e, R ⇒ décalage A → R. La 7e lettre du message L → C
  8. 8e, E ⇒ décalage A → E. La 8e lettre du message L → P
  9. 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. 1ère lettre de la clé V. On applique un décalage V → A. La première lettre du message, Y → D
  2. 2e, I ⇒ décalage I → A. La 2e lettre du message M → E

À faire

Fonction shift_letter

Vous devez écrire en Python une fonction shift_letter(letter, n)

  • letter est un caractère,
    • si c'est une lettre majuscule de A à Z, sans accent, elle sera décalée
    • sinon elle sera inchangée
  • n est l'amplitude du décalage, positif ou négatif, n'est pas limité,
  • la fonction renvoie le résultat du décalage (ou pas de décalage si pas une majuscule sans accent)

Vous pourrez utiliser les fonctions

  • ord(letter) qui pour un caractère donné renvoie son code entier,
  • chr(code) qui pour un code entier donné renvoie le caractère correspondant,
  • le modulo % car n'oubliez pas qu'après Z on revient à A, il y a une idée de cercle et dans ces cas là le modulo est souvent très utile.
2021/07/05 11:04 · goupillwiki

Cette fonction est identique à celle vue dans le 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)
nsi/tds/cryptographie/chiffre_vigenere.txt · Dernière modification : de 193.51.53.161