Cryptographie

author image
Narththanan SIVANATHAN

Présentation

1. Introduction

La cryptographie est une méthode qui permet de transférer des textes au destinataire sans que les autres personnes comprennent le vrai sens du texte. Pour que le destinataire comprenne la vraie signification du texte, il doit connaître la clé avec laquelle l’expéditeur a crypté le texte. Il existe plusieurs types de cryptage et de décryptage, par exemple César, Vigenère, Affine, RSA, etc. Dans le cadre de notre projet, nous avons décidé de programmer trois types de cryptage et décryptage. Pour faciliter les tâches, chacun d'entre nous a décidé de programmer un des trois types de cryptage. Aslan Serhat s'occupe de César, Moraux Brice s'occupe d’Affine et moi, je me suis occupé de Vigenère.

César : Le cryptage avec César est le plus facile des cryptages car il consiste simplement en un décalage.
Par exemple : Texte = ABCDE ; Clé = 1 ; Texte décryptage = BCDEF

Vigenère : Le cryptage avec Vigenère est une combinaison entre le texte et la clé.

Affine : Le cryptage avec Affine se fait par des calculs de la forme ax + b. Il faut définir a et b pour la clé.

Pendant la Seconde Guerre mondiale, certains pays ont utilisé la cryptographie pour transmettre des messages à leurs alliés sans que leurs ennemis comprennent leur contenu.

2. Cahier des charges

Pour un cryptage commun, nous devons utiliser un dictionnaire. Dans notre cas, nous allons utiliser un dictionnaire comprenant l’alphabet (26 lettres), les chiffres de 0 à 9 (10 chiffres) et l’espace. Les autres symboles ne sont pas définis dans notre dictionnaire. Donc, dans notre dictionnaire, nous avons 37 valeurs allant de 0 à 36. Dans le cadre de ma partie sur le cryptage Vigenère, nous devons associer le texte et la clé.

Par exemple : Texte = BONJOUR ; Clé = MOT

Cryptographie-tab-1

Ensuite, il faut prendre la valeur combinée entre le texte et la clé, puis l'affecter à l'inverse du dictionnaire pour crypter le message. Pour décrypter, il faut faire l'inverse du cryptage. Sans oublier, il faut appliquer le modulo ; le modulo est une boucle qui permet de toujours trouver un caractère dans le dictionnaire.

Par exemple : Si on a 21 + 19 = 40 et que la valeur 40 n'existe pas dans notre dictionnaire, la valeur du texte crypté doit toujours trouver un caractère.

Au début, l’utilisateur doit définir s'il veut crypter ou décrypter, puis il doit choisir le type de cryptographie parmi César, Vigenère et Affine. Ensuite, il doit entrer la clé. Avec cette méthode, l’utilisateur a toute la liberté de choisir son type de cryptage ou de décryptage.

Le Programme

1. Rapport technique

Dans ce rapport technique, nous allons séparer le programme en deux parties. La première partie concerne le programme commun et l'autre partie est dédiée au programme qui concerne Vigenère.

Partie n°1 :

Programme dictionnaire :
dico

Il y a 37 valeurs dans ce dictionnaire : les lettres de l'alphabet, l'espace et les chiffres de 0 à 9. Chaque caractère a sa valeur dans le dico. Pour mieux comprendre la fonction du dictionnaire, nous allons le représenter sous la forme d’un tableau.

tab-dico
Programme inverse dictionnaire :
dico-invers

Dans cette fonction, nous allons faire l’inverse du dictionnaire : les caractères seront transformés en valeurs et les valeurs seront transformées en caractères. Pour faciliter la compréhension, je vais ajouter un tableau similaire à celui du dictionnaire.

tab-dico-invers
Programme majuscule :
maj

Cette fonction permet de transformer le texte entré en minuscule en majuscule, tandis que le texte déjà en majuscule reste en majuscule, car dans notre dictionnaire, nous n'avons que les valeurs de l'alphabet en majuscule.

Programme texte valeur :
txt-val

Cette fonction permet d'affecter à chaque caractère du dico sa valeur qui se trouve dans le dictionnaire.

Programme valeur texte inverse :
txt-val-invers

Cette fonction permet d'affecter à chaque caractère du dico sa valeur qui se trouve dans l'inverse du dictionnaire, réalisant ainsi l'inverse de la fonction que j'ai abordée précédemment.

Partie n°2 :

Programme boucle clé et sa valeur dico :
boucle

Cette fonction permet de répéter les caractères de la clé autant de fois que nécessaire pour correspondre au nombre de caractères du texte. Ensuite, pour cette liste, on affecte les valeurs du dico.

Programme associé les valeur texte et valeur boucle clé :
boucle-cle

Cette fonction associe les valeurs de la clé, qui est répétée, avec les valeurs du texte. Ainsi, on obtient une liste avec ces valeurs combinées. Ceci est la liste des valeurs du texte crypté.

Programme modulo :
modulo
Dès que les valeurs du dico dépassent la valeur 36, donc quand la valeur atteint 37, elle doit revenir à 0, formant ainsi une boucle. Voyez ce schéma :
modulo-dico
Programme inverse : combinaison des valeurs du texte et de la boucle de la clé, suivie de l'inverse modulo :
decyp

Cette fonction associe les valeurs de la clé à celles du texte. Nous obtenons donc une liste de ces valeurs combinées. Ceci est la liste des valeurs du texte déchiffré. Dès que les valeurs du dictionnaire dépassent la valeur 36, c'est-à-dire quand la valeur vaut -1, elle doit prendre la valeur 36 comme dans une boucle. Voir ce schéma :

modulo-inverse-dico

3. Les étapes de la démarche

Au début, nous avons décidé de répartir le travail. Ainsi, chacun d'entre nous aura une part équitable. Ensuite, nous avons effectué des recherches sur Internet pour comprendre le véritable sens du cryptage et du décryptage. Nous avons aussi étudié les différents types de cryptage et de décryptage que le professeur nous avait recommandés, à savoir ceux de César, Vigenère et Affine. Parallèlement, il nous a conseillé de créer un dictionnaire. Au début, nous avons créé ce dictionnaire à trois. Nous avons ensuite essayé à plusieurs reprises de crypter des textes sur des feuilles et avons trouvé des méthodes qui nous ont permis de trouver des solutions avec un programme sur Edupython.

Conclusion

1. Problèmes rencontrés

Au début de notre projet, nous voulions créer le jeu Othello, mais un autre groupe avait également cette idée, nous avons donc abandonné le projet. Finalement, l’autre groupe a aussi abandonné le projet sur Othello. Après avoir renoncé à Othello, nous voulions faire un jeu de bataille navale, mais finalement, nous avons pensé que nous n'aurions pas le temps de le terminer. À la fin, le professeur a proposé des projets aux groupes qui n’avaient pas d'idée, et c’est lui qui nous a donné l’idée de notre projet. Pendant le projet, j'ai perdu beaucoup de temps à rechercher sur internet, et à cause du temps perdu à choisir notre projet, nous n'avons pas eu le temps de faire l'interface graphique.

2. Après le projet

Après le projet, j'ai acquis beaucoup de connaissances en Python, ce qui peut être utile pour mes études supérieures en informatique. Grâce à ce projet et à celui en Sciences de l'ingénieur, je sais comment présenter un projet.

Documentation

author image

Narththanan SIVANATHAN

Développeur junior Back-End

Copyright 2024 © SIVANATHAN Narththanan