Outils pour utilisateurs

Outils du site


tp:progc:crypto01

⌫ Chiffrement

Chiffre de César

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 :

crypt11.txt
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….)

Chiffre de Vigénère

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 :

abcdefghijklmnopqrstuvwxyz
aabcdefghijklmnopqrstuvwxyz
bbcdefghijklmnopqrstuvwxyza
ccdefghijklmnopqrstuvwxyzab
……………………………………………..
eefghijklmnopqrstuvwxyzabcd
……………………………………………..
iijklmnopqrstuvwxyzabcdefgh
……………………………………………..
oopqrstuvwxyzabcdefghijklmn
ppqrstuvwxyzabcdefghijklmno
……………………………………………..
rrstuvwxyzabcdefghijklmnopq
……………………………………………..
yyzabcdefghijklmnopqrstuvwx
zzabcdefghijklmnopqrstuvwxy

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 :

crypt11b.txt
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 ?

Chiffre par transposition

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…

position01234567
lettreabcdefgh

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 :

crypt02.txt
JEDTSIIEREEASEUOFLTLTFPQ
CRLFETEEUPUHEUISESSTLIIST
CRNEEPIPFSIIETCTAQEFEOLG
DRLSURRCNELEIADAMERN 

Qui en est l'auteur ?

tp/progc/crypto01.txt · Dernière modification: 2021/05/04 15:12 (modification externe)