Crypter un texte avec le chiffre de César revient à opérer un décalage des lettres.
La valeur du décalage peut être considérée comme la clé de chiffrement.
Par exemple, crypter le texte : IL FAIT BEAU A POITIERS
en utilisant un décalage de 3 donne : LO IDLW EHDX D SRLWLHUV
.
Un décalage de -3 redonne évidement le texte d'origine.
On considère généralement que l'alphabet est cyclique, c'est à dire qu'en décalant le Z de 2 rangs, on tombe sur le B.
Il est aussi habituel de n'utiliser que des lettres majuscule, ce que nous ferons ici.
Écrivez un programme qui permet de chiffrer et déchiffrer un texte en utilisant le chiffre de César. Vous ferez en sorte que les noms des fichiers d'entrée et de sortie soient facilement paramétrables (l'idéal serait qu'on puisse les donner en ligne de commande), ainsi que le décalage (qui pourra être positif ou négatif).
Vous devez séparer la lecture et l'écriture dans un fichier du cryptage. Dans cet exercice comme dans les autres, les fonctions de cryptage, décryptage, analyse, etc… prendront en paramètres des chaînes de caractères.
Utilisez votre fonction pour tester rapidement plusieurs décalages.
Décryptez ainsi ce message après l'avoir copié dans un fichier :
XBHUK WHUAH NYBLS LBASL BLSPU ZJYPW APVUP SMLBA IPLUL ZIHOF LAKLT HUKHU AHBKP JATLZ ZHNPL YSLUV TKLJL SSLXB PSHCV PALUC VFLVB CYPAS LZSLA AYLZL AYPLU ULAYV BCHKL KHUZL ZJYPW ATHPZ ZLBSL TLUAB UHULH BKVYH CLJXB LZBUK PHTLU ALUAH ISLSV YZHWW LSSHW HUBYN LLASB FTVUZ AYHSL JHZHX BVFWH UBYNL SBFKP ZAXBL SHMBL PSSLK LWHWP LYLZA VPALZ JYPWA LTHPZ JLZAV PAWHY ALSSL ZBIAP SPALX BLSVU UFCLV PAWVP UJAKL ZJYPW ABYL
Qui en est l'auteur ? Utilisez Internet et un moteur de recherche pour répondre à cette question. (Et lorsque vous aurez la réponse, gardez la pour vous….)
Le chiffre de Vigénère est une méthode permettant de crypter un texte, à partir d'une clé (mot de passe). Le texte ne pourra être lisible que par la personne possédant la bonne clé. Le chiffre de Vigénère est basé sur le carré de Trithème :
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
b | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | a |
c | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | a | b |
…………………………………………….. | ||||||||||||||||||||||||||
e | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d |
…………………………………………….. | ||||||||||||||||||||||||||
i | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h |
…………………………………………….. | ||||||||||||||||||||||||||
o | o | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n |
p | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
…………………………………………….. | ||||||||||||||||||||||||||
r | r | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q |
…………………………………………….. | ||||||||||||||||||||||||||
y | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x |
z | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y |
Chaque ligne du tableau représente un alphabet décalé. Le résultat du cryptage du caractère 'O' (voir colonne o) avec le caractère 'Y' (ligne y) est donc : 'M'.
Si la clé est plus courte que le texte, on la recopie plusieurs fois.
À titre d'exemple, crypter le texte BONJOURTOUTLEMONDE
(les espaces ont été supprimées) avec la clé POITIERS
donne :
QCVCWYILDIBEMQFFSS
(en effet, crypter B avec P donne Q, crypter O avec O donne C etc…).
Écrivez deux programmes permettant de crypter et de décrypter un fichier texte en utilisant le chiffre de Vigénère. Il serait souhaitable que les noms des fichiers d'entrée et de sortie ainsi que le mot de passe soient facilement paramétrables.
Testez votre programme de décryptage sur le cryptogramme suivant :
AZIIV DOWRX UYGQR YZXWM PDVZC MHPEX ZVIIX ERMEI KEWQG ZIIRI VYRXZ CXVLX ZCVYV PLBEW CIXIM NZPYG EQRME YYZUY EPIEV RPDSD JTLAH ZMMYN MOVPW MSWJI CDIMZ PYGII RTLAH DKPPT MZMVP
le mot de passe utilisé est : **LIEVRE**
Quel est le titre de ce texte ?
Au contraire d'un chiffre par substitution, dans lequel on remplace les lettres par d'autres, un chiffre par transposition conserve les mêmes lettres, mais les mélange.
Nous proposons ici, pour une chaîne de caractères de longueur n, et étant donné un nombre p<n, de chiffrer la chaîne d'origine en prenant, dans cet ordre, les caractères en position 0, p, 2p, 3p, etc…
Lorsqu'on arrive au bout de la chaîne, on reprend à 0.
Ainsi, la chaîne abcdefgh
comporte 8 lettres. Choisissons p=3. La transposition obtenue est : ''adgbehcf''
En effet, on part de la lettre 0, puis on prend la lettre 3, puis la 6, puis la 1 (6+3=9 et 9%8=1), puis la 4 etc…
position | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
lettre | a | b | c | d | e | f | g | h |
Ce système fonctionne correctement dans la mesure où p et n sont premiers entre eux (pgcd(n,p)=1). Il faudra garder ceci à l'esprit.
On peut remettre les lettres dans l'ordre en utilisant une autre valeur de p. La valeur à utiliser est l'inverse de p modulo n, c'est la valeur q telle que (p*q)%n=1. Il existe des algorithme pour calculer cet inverse (Bezout). Nous nous contenterons de le trouver empiriquement. Dans notre exemple, le nombre q vaut 3 aussi. En effet, (3*3)%8=1 Écrivez une fonction qui prend en paramètre deux chaînes de caractères et un nombre et qui, après avoir vérifié que le nombre est bien premier avec la longueur de la chaîne (vous disposez de la fonction pgcd pour ça) transpose la chaîne de caractères comme indiqué.
Utilisez votre programme pour déchiffrer le cryptogramme suivant :
JEDTSIIEREEASEUOFLTLTFPQ CRLFETEEUPUHEUISESSTLIIST CRNEEPIPFSIIETCTAQEFEOLG DRLSURRCNELEIADAMERN
Qui en est l'auteur ?