Exercices

Chapitre 4: Sécurisation des communications*

Pour réaliser ces exercices on peut utiliser le module string de python.

# crée une chaîne de caractères avec l'alphabet

from string import ascii_uppercase as alphabet
print(alphabet)     # affiche ABCDEFGHIJKLMNOPQRSTUVWXYZ

# accès aux caractères par l'index
alphabet[0], alphabet[25]     # renvoie "A", "Z"

# recherche d'un caractère
alphabet.index("A"), alphabet.index("Z")     # renvoie 0, 25

# Méthode str.upper pour mettre une chaîne de caractère en majuscules
"Message".upper()   # renvoie "MESSAGE"

Implémenter des chiffrements symétriques en Python

  1. Implémenter le chiffrement de César en créant une fonction cesar qui prend deux paramètres:

    • message une chaîne de caractères à (dé)coder.
    • n un entier qui donne le décalage.

    Cette fonction doit convertir le message en majuscule, et décaler toutes les lettres de nn grâce au codage César, et laisser tous les autres caractères inchangés(ponctuation).

    Voici une série de tests à passer.

    assert cesar('message', 0) == "MESSAGE"
    assert cesar('message', 1) == 'NFTTBHF'
    assert cesar('message', -1) == 'LDRRZFD'
    assert cesar('message', 26) == 'MESSAGE'
    assert cesar('message', 53) == 'NFTTBHF'
    assert cesar('message', -27) == 'LDRRZFD'
    
    eluard = """Sur mes cahiers d’écolier
    Sur mon pupitre et les arbres
    Sur le sable sur la neige
    J’écris ton nom"""
    assert cesar(eluard, 13) == 'FHE ZRF PNUVREF Q’ÉPBYVRE\nFHE ZBA CHCVGER RG YRF NEOERF\nFHE YR FNOYR FHE YN ARVTR\nW’ÉPEVF GBA ABZ'
    
    # vérification du décodage
    assert cesar(cesar(eluard, 13), -13) == eluard.upper()
    
  2. Implémenter le chiffrement par substitution avec une fonction substitution qui prend deux paramètres:

    • message une chaîne de caractères à (dé)coder.
    • clé une chaîne de caractères qui donne les correspondances des caractères. Par exemple: AZERTYUIOPQSDFGHJKLMWXCVBN dans le cours.

    On pourra vérifier son fonctionnement sur l’exemple du cours:

    assert substitution("SUBSTITUTION", "AZERTYUIOPQSDFGHJKLMWXCVBN") == "LWZLMOMWMOGF"
    

    Comment devra être effectué le décodage à partir du message codé et de la clé?

  3. Implémenter le chiffrement de Vigenère avec une fonction vigenère qui prend deux paramètres:

    • message une chaîne de caractères à (dé)coder.
    • clé une chaîne de caractères qui donne les décalages des caractères. Par exemple: ABC dans le cours.

    On pourra vérifier son fonctionnement sur l’exemple du cours:

    assert vigenère("SUBSTITUTION", "ABC") == "SVDSUKTVVIPP"
    

    Comment devra être effectué le décodage à partir du message codé et de la clé?