PCSI du lyc´ee de l’Essouriau
Universit´e Paris-Sud
Centre d’Orsay
Math´ematiques et Informatiques
TP 09
2011–2012
TP 09 — Cryptographie
L’objectif de ce TP est de donner une id´ee des diverses manipulation que l’on peut effectuer sur un message
pour le crypter. On utilisera les fonctions Char et Ord du package StringTools.
Exercice 1 : (Algorithme de C´esar)
L’algorithme de C´esar est le plus ancien (et le plus simple !) algorithme de cryptage d’un texte. Il consiste
`a changer chaque lettre du message selon un proc´ed´e constant de d´ecalage dans l’ordre alphab´etique. Par
exemple, si le texte initial est ”Bonjour”, il devient si le d´ecalage est de +1 ”Cpokpvs”.
Question 1 –
Chargez le package StringTools et testez les commandes Char et Ord. On remarquera que Maple connaˆıt
256 caract`eres, num´erot´es de 0 `a 255. Cr´eez un message court (∼10 caract`eres) et un message long
(plusieurs phrases), vous pourrez pour cela faire un copier-coller depuis internet.
Question 2 –
En utilisant les commandes Explode et Implode, programmez une fonction Cesar qui prend en argument
un message et une cl´e (nombre compris entre 0 et 255) et qui crypte le message selon l’algorithme de
C´esar. Vous ferez attention `a la p´eriodicit´e dans le cryptage, c’est-`a-dire que les num´eros des caract`eres
sont `a comprendre modulo 256.
Question 3 –
V´erifiez que vous pouvez bien d´ecrypter le message crypt´e avec l’algorithme de C´esar lorsque vous connais-
sez la cl´e.
Question 4 –
Lorsque vous ne connaissez pas la cl´e, proposez une m´ethode pour d´ecrypter tout de mˆeme le message.
Testez cet algorithme sur le message court et sur le message long.
Lorsque le message est long, les fonctions Implode et Explode ne peuvent plus ˆetre utilis´ees. Vous pourrez
en cr´eer vous-mˆeme des versions plus ´elabor´ees.
Exercice 2 : (Cryptage lin´eaire)
Le cryptage lin´eaire repose sur le mˆeme principe que l’algorithme de C´esar, mais au lieu d’ajouter une
constante au nombre codant le caract`ere, on effectue une transformation affine, x7→ ax +b, o`u aet bsont
des nombres entiers. Cette op´eration est bien entendu `a prendre modulo 256.
Question 1 –
Programmez l’algorithme de cryptage lin´eaire en vous inspirant de l’algorithme de C´esar. Vous fabriquerez
une fonction code_affine(message, a, b) o`u aet bsont les param`etres du codage lin´eaire.
Question 2 –
Pour d´ecrypter le message, il faut savoir diviser par amodulo 256. Proposez une proc´edure invm(a,b)
qui retourne (lorsqu’il existe) l’inverse de amodulo b. Vous pourrez utiliser l’algorithme d’Euclide ou bien
faire une recherche exhaustive. Comparez le r´esultat de invm(a,b) avec celui de 1/a mod b.
Question 3 –
Proposez une fonction decode_affine(message, a, b) qui d´ecode un message encod´e grˆace au codage
lin´eaire de param`etres aet b.
Question 4 –
Modifiez les fonctions pr´ec´edentes afin qu’elles acceptent des messages longs.
1