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 variablemessage
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 unprint
Solution
On définit une variable
message
que l'on affiche ensuite à l'aide deprint
message = "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
c
prend 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 variablemessage
.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 :
ord
etchr
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 fonctionord
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
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 fonctionchr
dans la console pour le savoir.Solution
La fonction
chr
est é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é avecchr
On va implémenter le codage César dans les questions suivantes.
Pour commencer, modifie leprint
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
À 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 fonctionchr
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
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 variablemessage
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 variablemessage_codé
: utilise une concaténation pour lui ajouter le nouveau caractère. Enfin utilise unprint
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 !