Le programme est composé de 4 fonctions principales qui sont appelées dans le __main__
en fonction du choix de l'utilisateur.
Il est d'abord demandé a l'utilisateur de choisir un message a chiffrer ou déchiffrer.
Les differents moyen de chiffrer sont accessibles via un menu qui demande a l'utilisateur de choisir entre 4* choix qui sont les suivants:
- Code Inverse
- Code César
- Code Vigenère
- Code César affine
Le programme demande ensuite a l'utilisateur un mode (chiffrage ou déchiffrage) et une clé (si besoin) puis affiche le résultat du chiffrage ou du déchiffrage.
Fonction
optimized_crypt
ligne64
Le code inverse est un code très simple qui consiste à inverser l'ordre des lettres d'un message.
Bonjour
>ruojnoB
Bonjour, comment allez-vous?
>?uov-zeulla tnemmoc ,ruojnoB
Je suis un code
>edoc nu sius eJ
Fonction
cesar
ligne70
Le code César est un code qui consiste à décaler les lettres d'un message d'un certain nombre de lettres. Pour le déchiffrer il suffit de décaler les lettres dans l'autre sens.
Dans le code on utilise la clé pour décaler les lettres en permuation circulaire.
- Clé: 3, Message:
Bonjour
Resultat:e#Ç.#p_
- Clé: -3, Message:
e#Ç.#p_
Resultat:Bonjour
- Clé: 42, Message:
Il a mangé des camions a la lavande?
Resultat:+Vxùx2ùèI$x,vaxGù2NPèaxùxVùxVùâùè,vL
- Clé: -42, Message:
+Vxùx2ùèI$x,vaxGù2NPèaxùxVùxVùâùè,vL
Resultat:Il a mangé des camions a la lavande?
Fonction
code_vigenere
ligne79
Le code Vigenère est un code qui consiste à décaler les lettres d'un message d'un certain nombre de lettres en fonction de la clé qui est un mot. Pour le déchiffrer il suffit de décaler les lettres dans l'autre sens.
- Clé:
bonjour
, Message:Bonjour
, Mode:chiffrer
Resultat:Âf]ÔfOû
- Clé:
bonjour
, Message:Âf]ÔfOû
, Mode:déchiffrer
Resultat:Bonjour
- Clé:
Muzik4
, Message:La 3ème touche FA# du piano ne fonctionne plus!!
, Mode:chiffrer
Resultat:dtM^?(LDgDZ9+=M[aGÉN10SzÂÊ00RoÉE0:@BûÙE:lb8[1kcm
- Clé:
Muzik4
, Message:dtM^?(LDgDZ9+=M[aGÉN10SzÂÊ00RoÉE0:@BûÙE:lb8[1kcm
, Mode:déchiffrer
Resultat:La 3ème touche FA# du piano ne fonctionne plus!!
Le code césar affine utilise deux clés pour décaler les lettres d'un message. La première clé est un nombre premier avec la taille de l'alphabet utilisé. La deuxième clé est un nombre aléatoire.
Le programme utilise des nombres aléatoire a chaque utilisation pour générer les clés.
Fonction
genere_cle
ligne28
Deux nombres a
et b
sont généré aléatoirement entre 0 et 1000.
La fonction verifie ensuite que a
est premier avec la taille de l'alphabet utilisé (109) grâce a la fonction verif_cle
ligne 39
. Si ce n'est pas le cas, a
reprend une nouvelle valeur aléatoire et la fonction recommence.
La fonction verif_cle
utilise la fonction pgcd
ligne 23
pour calculer le pgcd de a
et de la taille de l'alphabet.
Fonction
affine
ligne95
Le chiffrement utilise la formule suivante: y = (a * x + b) % (taille alphabet)
y
est la lettre chiffréx
est la lettre à chiffrera
est la première cléb
est la deuxième clétaille alphabet
est la taille de l'alphabet utilisé (109 dans notre cas)
Utilise la même fonction que le chiffrement avec le paramètre
decrypt
Pour déchiffer le message, on a besoin de la clé a
et de la clé b
pour créer la clé inverse. Pour cela on appelle la fonction prime
ligne 45
qui est une implémentation de l'algorithme d'Euclide étendu. Cette fonction nous permet de trouver a'
et b'
tel que a * a' + b * b' = 1
.
On utilise ensuite la formule suivante pour déchiffrer le message: x = (a' * y + b') % (taille alphabet)
y
est la lettre chiffréx
est la lettre à chiffrera'
est la clé inverse dea
b'
est la clé inverse deb
taille alphabet
est la taille de l'alphabet utilisé (109 dans notre cas)
- Clé:
a = 7
,b = 42
, Message:Bonjour
, Mode:chiffrer
Resultat:ùK_-K9k
- Clé:
a = 7
,b = 42
, Message:ùK_-K9k
, Mode:déchiffrer
Resultat:Bonjour
- Clé:
a = 871
,b = 60
, Message:Lorem Ipsum Dolor Sit Amet
, Mode:chiffrer
Resultat:PJ'ejk.G08jkWJRJ'kC9#kîje#
- Clé:
a = 871
,b = 60
, Message:PJ'ejk.G08jkWJRJ'kC9#kîje#
, Mode:déchiffrer
Resultat:Lorem Ipsum Dolor Sit Amet
Il existe un 5ème choix dans le menu (activable en ecrivant 5
), cela permet d'activer un fonction qui teste automatiquement la validité du code césar affine en chiffrant et déchiffrant plusieures phrases avec des clés aléatoires et en comparant le résultat avec le message de départ.
Cette fonction permettait le debugage du code césar affine de manière plus rapide.