• Aucun résultat trouvé

Cr´eer un fichier texte puis tester sur celui-ci le programme pr´ec´edent.

N/A
N/A
Protected

Academic year: 2022

Partager "Cr´eer un fichier texte puis tester sur celui-ci le programme pr´ec´edent."

Copied!
2
0
0

Texte intégral

(1)

PTSI - Travaux Pratiques d’informatique

Chiffrement

Nous utiliserons dans ce TP le langage de programmation Python au moyen de l’environnement de d´eveloppement IDLE.

Exercice 1. On consid`ere le programme suivant :

from tkinter import*

# r´ecup´eration du nom du fichier texte au moyen d’une bo^ıte de dialogue fenetre=Tk()

nomfichier=filedialog.askopenfilename(filetypes=[("fichier texte",".txt")]) fenetre.destroy()

# lecture du fichier

fichier=open(nomfichier,’r’) chaine=fichier.read() fichier.close()

# conversion en majuscule CHAINE=chaine.upper()

# ´ecriture dans le fichier fichier=open(nomfichier,’w’) fichier.write(CHAINE) fichier.close()

Cr´eer un fichier texte puis tester sur celui-ci le programme pr´ec´edent.

Exercice 2.

L’algorithme de chiffrementROT13 consiste `a d´ecaler chaque lettre d’un message de treize crans dans l’alpha- bet :

a 7→ n

b 7→ o

... y 7→ l

z 7→ m

Cr´eer un programme Python permettant de r´ealiser le chiffrement ROT13 d’un fichier texte, puis cr´eer un programme Python permettant de r´ealiser le d´echiffrement.

Exercice 3.

Les algorithmes de chiffrement `a d´ecalage fixe comme le ROT13 sont relativement faciles `a casser, en effet, pour un alphabet de 26 caract`eres, il n’existe que 26 d´ecalages possibles (dont un trivial) et il suffit de tous les tester pour d´echiffrer le message consid´er´e.

L’algorithme de Vigen`ere consiste `a introduire une clef qui permet de rendre le d´ecalage variable selon la position du caract`ere dans le message.

L’exemple ci-dessous effectue le chiffrement du message ”bring out your dead” par l’algorithme de Vigen`ere avec la clef

”grail” :

b r i n g o u t y o u r d e a d

1 17 8 13 6 14 20 19 24 14 20 17 3 4 0 3

g r a i l

6 17 0 8 11 6 17 0 8 11 6 17 0 8 11 6 17 0 8 11

7 8 8 21 17 5 20 1 4 5 20 25 9 21 0 11

h i i v r f u b e f u z j v a l

Le message chiffr´e ”hiivr fub efuz jval” s’obtient en utilisant successivement les d´ecalages donn´es par la clef.

1. Cr´eer un programme Python permettant de r´ealiser le chiffrement de Vigen`ere d’un fichier texte, puis cr´eer un programme Python permettant de r´ealiser le d´echiffrement.

2. G´en´eraliser les programmes pr´ec´edents ` a l’alphabet compos´e des 128 premiers caract`eres ascii.

www.emmanuelmorand.net 1/2 PTSI1516TpInfo05

(2)

PTSI - Travaux Pratiques d’informatique Chiffrement

R´ eponses

2)

from tkinter import*

# r´ecup´eration du nom du fichier texte au moyen d’une bo^ıte de dialogue fenetre=Tk()

nomfichier=filedialog.askopenfilename(filetypes=[("fichier texte",".txt")]) fenetre.destroy()

# lecture du fichier

fichier=open(nomfichier,’r’) chaine=fichier.read() fichier.close()

# chiffrement ROT13 CHAINE=""

for k in range(0,len(chaine)):

if 97<=ord(chaine[k])<=122:

CHAINE=CHAINE+chr(97+(ord(chaine[k])-84)%26) else:

CHAINE=CHAINE+chaine[k]

# ´ecriture dans le fichier fichier=open(nomfichier,’w’) fichier.write(CHAINE) fichier.close()

3)

from tkinter import*

# r´ecup´eration du nom du fichier texte au moyen d’une bo^ıte de dialogue fenetre=Tk()

nomfichier=filedialog.askopenfilename(filetypes=[("fichier texte",".txt")]) fenetre.destroy()

# lecture du fichier

fichier=open(nomfichier,’r’) chaine=fichier.read() fichier.close()

# r´ecup´eration de la clef de chiffrement clef=str(input("Clef de chiffrement=?"))

# chiffrement de Vigen`ere CHAINE=""

for k in range(0,len(chaine)):

if 97<=ord(chaine[k])<=122:

decalage=ord(clef[k%len(clef)])-97

CHAINE=CHAINE+chr(97+(ord(chaine[k])-97+decalage)%26) else:

CHAINE=CHAINE+chaine[k]

# ´ecriture dans le fichier fichier=open(nomfichier,’w’) fichier.write(CHAINE) fichier.close()

pour le d´echiffrement, on modifie l’instruction :

CHAINE=CHAINE+chr(97+(ord(chaine[k])-97-decalage)%26)

pour la g´en´eralisation :

# chiffrement de Vigen`ere g´en´eralis´e CHAINE=""

for k in range(0,len(chaine)):

decalage=ord(clef[k%len(clef)])

CHAINE=CHAINE+chr((ord(chaine[k])+decalage)%128)

et :

CHAINE=CHAINE+chr((ord(chaine[k])-decalage)%128)

www.emmanuelmorand.net 2/2 PTSI1516TpInfo05

Références

Documents relatifs

Sur le coup, je comprends pas trop (en fait, il s'avèrera qu'ils ont zappé cette section et sont déjà sur la suivante), et poursuis vers la 11, même si cela m'inquiète: nous ne

La deuxième nous fait le coup de poisson (normal sur l'eau!), que nous apprécions guère, c'est pourquoi nous les doublons dans la foulée. Puis une 3ème! Il nous en reste une, la plus

La 40 est la plus pénible à aller chercher, c'est pourquoi nous marquons un temps d'arrêt pour décider de l'itinéraire à emprunter.. Une fois celui-ci déterminé, nous filons

On utilisera ´ evidemment la m´ ethode du pivot (simple d’abord puis avec pas optimal) et les deux fonctions programm´ ees au 3 et 4... 6) Comparer l’efficacit´ e de cette m´

Construire sur un seul graphique les nuages de points de l’indice de Qu´ etelet en fonction de la taille, en fonction du poids, pour chaque sexe8. Repr´ esenter, sur un seul

R´ealiser un programme de chiffrement nomm´e prog6.py permettant de chiffrer un fichier texte nomm´e messageclair.txt en un fichier texte nomm´e messagechiffre.txt selon

Cr´eer puis tester un programme permettant d’obtenir la table des dix premi`eres puissances d’un entier quelconque..

Cr´eer puis tester un programme permettant d’afficher la liste des multiples de sept inf´erieurs ou ´egaux ` a un entier n quelconque..