Contenu principal
Chapitre 7 · Les listes › Leçon 7 sur 8

Cryptographie

La cryptographie est la science des messages codés. Dans cette leçon tu vas apprendre les base de la cryptographie en Python.

  1. 1

    Pour commencer, il faut un message que l'on souhaite transmettre de manière sécurisée, afin de protéger son contenu d'un intermédiaire malicieux.

    Crée une variable message dans l'éditeur, et assigne lui une chaîne de caractères de ton choix. C'est le message que tu vas crypter dans les prochaines étapes. Par exemple : "Le code du wifi est 1234". Puis affiche ce message avec un print

    Solution

    On définit une variable message que l'on affiche ensuite à l'aide de print

    message = "Le code du wifi est 1234"
    print(message)
  2. 2

    Pour crypter le message, on va en modifier chaque caractère à l'aide d'une boucle.

    La boucle for permet d'itérer directement sur une chaîne de caractères comme on l'a vu dans les leçons précédentes :

    for c in "mon message":
    	print(c)

    Ici la variable c prend successivement les valeurs "m" puis "o" puis "n" etc. Et print(c) affiche le caractère en cours.

    Ajoute une boucle for dans l'éditeur qui affiche chaque caractère contenu dans la variable message.

    Solution

    On reprend la syntaxe de l'exemple en itérant sur la variable message :

    message = "Le code du wifi est 1234"
    
    for c in message:
    	print(c)
  3. 3

    Il reste à modifier chaque caractère pour crypter le message. Pour ça nous allons utiliser deux fonctions prédéfinies dans Python : ord et chr

    La fonction ord prend un caractère en argument et renvoie un nombre, par exemple le caractère "a" est associé au nombre 97 :

    >>> ord('a')
    97
    >>> ord('!')
    33
    

    Quel est le nombre associé au symbole € ? Utilise la fonction ord dans la console pour le savoir. N'oublie pas les guillemets : cette fonction prend en argument une chaîne de caractères.

    Solution

    La fonction ord est prédéfinie donc elle peut s'employer directement sans importer de module :

    >>> ord('€')
    8364
    
  4. 4

    Réciproquement lorsqu'on connaît le code Unicode on peut retrouver le caractère associé à l'aide de la fonction chr :

    >>> chr(97)
    a
    >>> chr(8364)
    €
    

    Quel est le caractère ayant pour code Unicode le 8734 ? Utilise la fonction chr dans la console pour le savoir.

    Solution

    La fonction chr est également prédéfinie :

    >>> chr(8734)
    ∞
  5. 5

    Le codage de César consiste à décaler tous les caractères d'une valeur fixée à l'avance, qu'on appelle la clé. Par exemple avec une clé de 2, le A devient un C, le B devient un D etc.

    Pour l'implémenter en Python l'idée est la suivante : on part d'un caractère, on récupère son code Unicode avec ord, on effectue le décalage en ajoutant la clé, et enfin on récupère le caractère codé avec chr

    On va implémenter le codage César dans les questions suivantes.

    Pour commencer, modifie le print de la boucle for dans l'éditeur afin d'afficher le code Unicode de chaque caractère.

    Solution

    On appelle la fonction ord pour afficher le code Unicode de chaque caractère :

    message = "Le code du wifi est 1234"
    
    for c in message:
    	print(ord(c))
  6. 6

    À présent on va appliquer la clé pour décaler les codes. Une clé de 2 transforme le A en C en décalant le code Unicode de +2.

    Utilise une clé de 1000 pour décaler les codes Unicode.

    Solution

    On ajoute +1000 à chaque code Unicode :

    message = "Le code du wifi est 1234"
    
    for c in message:
    	print(ord(c) + 1000)
  7. 7

    Il ne reste plus qu'à récupérer les caractères correspondants aux codes modifiés pour obtenir le message crypté.

    En utilisant la fonction chr affiche les caractères du message crypté.

    Solution

    La fonction chr nous permet de passer du code Unicode au caractère :

    message = "Le code du wifi est 1234"
    
    for c in message:
    	print(chr(ord(c) + 1000))
  8. 8

    Pour l'instant le message apparaît caractère par caractère, chaque caractère sur une ligne. On va y remédier en s'assurant de ne créer qu'une seule chaîne de caractères.

    Ajoute une variable message_codé à la ligne 2 sous ta variable message et assigne-lui une chaîne de caractères initialement vide. Cette variable va servir à concaténer tous les caractères du message codé.

    Ensuite remplace le print de la boucle for afin de réassigner la variable message_codé : utilise une concaténation pour lui ajouter le nouveau caractère. Enfin utilise un print final après la boucle pour afficher le message codé.

    Solution

    On crée une variable message_codé contenant initialement un chaîne de caractères vide.

    L'idée est d'ajouter un caractère à cette variable à chaque itération de la boucle for pour qu'elle contienne à la fin tous les caractères du message crypté.

    Pour ce faire on réassigne la variable message_codé de la même manière que pour incrémenter un nombre. Le + correspond ici à la concaténation des chaînes de caractères :

    message = "Le code du wifi est 1234"
    message_codé = ""
    
    for c in message:
    	message_codé = message_codé + chr(ord(c) + 1000)
    
    print(message_codé)

Le code de César est une méthode de cryptographie dite à clé secrète. Cette méthode n'est plus utilisée aujourd'hui dans les communications cryptées car on connaît d'autres algorithmes plus sécurisés dits à clé publique.

La méthode de César reste incontournable pour s'initier à la cryptographie !

Chargement...

Collecte des fichiers...

>>>