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
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
messagedans 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 unprintSolution
On définit une variable
messageque l'on affiche ensuite à l'aide deprintmessage = "Le code du wifi est 1234" print(message) - 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
cprend successivement les valeurs"m"puis"o"puis"n"etc. Etprint(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
Il reste à modifier chaque caractère pour crypter le message. Pour ça nous allons utiliser deux fonctions prédéfinies dans Python :
ordetchrLa fonction
ordprend un caractère en argument et renvoie un nombre, par exemple le caractère"a"est associé au nombre 97 :>>> ord('a') 97 >>> ord('!') 33Quel est le nombre associé au symbole € ? Utilise la fonction
orddans la console pour le savoir. N'oublie pas les guillemets : cette fonction prend en argument une chaîne de caractères.Solution
La fonction
ordest prédéfinie donc elle peut s'employer directement sans importer de module :>>> ord('€') 8364 - 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
chrdans la console pour le savoir.Solution
La fonction
chrest également prédéfinie :>>> chr(8734) ∞ - 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é avecchrOn va implémenter le codage César dans les questions suivantes.
Pour commencer, modifie le
printde la boucle for dans l'éditeur afin d'afficher le code Unicode de chaque caractère.Solution
On appelle la fonction
ordpour afficher le code Unicode de chaque caractère :message = "Le code du wifi est 1234" for c in message: print(ord(c)) - 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
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
chraffiche les caractères du message crypté.Solution
La fonction
chrnous 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
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 variablemessageet 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
printde la boucle for afin de réassigner la variablemessage_codé: utilise une concaténation pour lui ajouter le nouveau caractère. Enfin utilise unprintfinal 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 !