Projet Crypto

1. Casser le chiffre de César

Principe du chiffre de César

Comme vu lors du TP2, le chiffre de César consiste à décaler, dans le message à transmettre, toutes les lettres d'un certain nombre de places. Par exemple, si le décalage vaut trois, alors la lettre 'a' devient 'd', 'b' devient 'e', ..., 'z' devient 'c'. Le destinataire du message doit connaître ce décalage afin de pouvoir l'appliquer (de façon inversée) sur le message chiffré et obtenir le message originel.

Voici deux fichiers contenant un message, en français, chiffré avec cette technique. A vous de les déchiffrer (dans les deux fichiers, seules les lettres ont été modifiées, les signes de ponctuation ainsi que les chiffres n'ont pas été touchés) : fichier1 et fichier2 (clic-droit, puis enregistrer-sous).

Plus d'informations sur le chiffre de César sur le site de Wikipedia.

Attaquer le chiffre de César

La première faiblesse de ce chiffrage est son nombre limité de possibilités... Si quelqu'un souhaite casser ce code, il peut essayer tous les décalages possibles (26 en tout) sur une partie du message, et conserver le décalage qui fait apparaître des mots intelligibles.

Dans ce projet, il faut proposer une méthode plus simple et automatique. Les deux textes chiffrés sont des messages en français, la lettre qui y apparait le plus souvent doit donc être le 'e' (en français, la lettre 'e' est celle qui apparait le plus souvent). A vous de chercher, dans les deux messages, quelle lettre apparait le plus souvent : cette lettre devrait être la lettre 'e' du message non chiffré, et vous pourrez trouver le décalage à partir d'elle.

Par exemple, si vous trouvez que le message chiffré contient une majorité de 'o', cela signifie que toutes les lettres du message d'origine ont été décalées de 10 places dans l'alphabet, et que le 'e' est ainsi devenu le 'o'.

Votre programme doit analyser le fichier chiffré d'entrée, trouver la lettre qui y apparait le plus souvent, et en déduire le décalage inverse à appliquer au texte pour retrouver le message d'origine. Notez bien que cette méthode, comme toutes les méthodes de déchiffrage d'un message, ne fonctionne que si le message est assez long...

Conseils

. Écrivez une fonction qui prend en paramètre un tableau de caractères, et renvoie en sortie le caractère qui y apparait le plus souvent, ou bien directement le décalage à effectuer pour que ce caractère se transforme en 'e'. Cette fonction, utile pour cette partie, pourra être réutilisées dans la partie suivante.

. Lorsque vous calculerez le décalage à appliquer à votre message chiffré, préférez un décalage positif plutôt qu'un décalage négatif, qui pourrait produire de mauvais résultats avec l'opération modulo. Par exemple, si la lettre 'o' du message chiffré correspond à la lettre 'e' du message d'origine, un décalage de 10 lettres dans le sens contraire de l'alphabet (-10) doit avoir lieu. Dans ce cas, optez plutôt pour un décalage de 16 lettres dans le sens de l'alphabet (+16).