Skip to content
Snippets Groups Projects
Commit ba2f4f22 authored by SCHIESS Mathieu's avatar SCHIESS Mathieu
Browse files

remplacer le mot code par chiffrer ou programme en fonction du contexte

parent 395d294f
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
<div style="padding:20px;background-color:papayawhip;" >
<h3 style="color:chocolate"> <i class="fa fa-info" aria-hidden="true"> </i> &nbsp; Remarque introductive &nbsp; <i class="fa fa-info" aria-hidden="true"></h3>
<p> Ce fichier est fait pour être lu sur le site <a href="https://notebook.basthon.fr/"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style="border: 0; display:inline; margin: 0 5px; height:30px" alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <a href="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" &nbsp; <i class="fa fa-folder" aria-hidden="true"> </i>
</p> </div>
%% Cell type:markdown id: tags:
# Chiffrement symétrique - Le chiffrement monoalphabétique
Le but de ce travail pratique est de déchiffrer un message qui a été chiffré avec un chiffrement monoalphabétique en adaptant un programme déjà créé.
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 1 </h3>
Le programme suivant permet de déchiffrer un message codé selon le principe monoalphabétique, en connaissant la clé de chiffrement.
Le programme suivant permet de déchiffrer un message selon le principe du chiffrement monoalphabétique, en connaissant la clé de chiffrement.
Lisez-le en essayant de le comprendre, puis testez-le.
%% Cell type:code id: tags:
``` python
# Texte à déchiffrer
texte_chiffre = """WI RUWWIAI VXVBUPFX TUOV VUOQSXMI OPI NUPPI SPPII"""
# Alphabet MAJUSCULE uniquement pour simplifier
liste_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# Pour chaque lettre, correspond une lettre dans liste_alphabet
liste_chiffree = "SNRFIYAQXLKWBPUZCHVMOTGJDE"
# texte_dechiffree contiendra la chaine de caractère donc le texte déchiffré
texte_dechiffre = ""
# Parcours caractère par caractère le fichier ouvert.
for lettre in texte_chiffre:
# Retourne vrai si "lettre" est un caractère alphabétique (a..z)
if lettre.isalpha():
# Recherche la position (index) de la lettre à décoder dans la liste_chiffree.
# Recherche la position (index) de la lettre à déchiffrer dans la liste_chiffree.
index = liste_chiffree.index(lettre)
# On utilise cet index pour trouver la lettre dans liste_alphabet.
lettre_decodee = liste_alphabet[index]
lettre_dechiffre = liste_alphabet[index]
# On ajoute le caractère déchiffré à la suite du texte déjà déchiffré.
texte_dechiffre = texte_dechiffre + lettre_decodee
texte_dechiffre = texte_dechiffre + lettre_dechiffre
else:
# la lettre n'est pas un caractère alphabétique mais peut-être une ponctuation
texte_dechiffre = texte_dechiffre + lettre
# On affiche le texte decodé
# On affiche le texte dechiffre
print(texte_chiffre)
print(texte_dechiffre)
```
%% Cell type:markdown id: tags:
On veut maintenant déchiffrer le message suivant `JI KXJIEOI IWIFEIJ TI OIK IKNVOIK XEYXEXK D'IYYFVXI` qui a été codé avec la clé `VMOTIYAQXLGJDESNRFKWBPUZCH`.
On veut maintenant déchiffrer le message suivant `JI KXJIEOI IWIFEIJ TI OIK IKNVOIK XEYXEXK D'IYYFVXI` qui a été chiffré avec la clé `VMOTIYAQXLGJDESNRFKWBPUZCH`.
Reprenez le code précédent et adaptez-le pour décoder ce message.
Reprenez le programme précédent et adaptez-le pour déchiffrer ce message.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:breakpoint
#### Ctrl+enter pour continuer ...........
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 2</h3>
On aimerait maintenant déchiffrer un message chiffré avec le chiffrement monoalhabétique, mais dont on ne connaît pas la clef.
**Comment procéder pour trouver la clé ?**
On peut compter les occurrences (répétition) de chaque lettre dans le message chiffré et les comparer à celles de la langue française pour essayer de retrouver la correspondance.
C'est ce que fait le code suivant. Lisez-le en essayant de le comprendre, puis testez-le.
C'est ce que fait le programme suivant. Lisez-le en essayant de le comprendre, puis testez-le.
%% Cell type:code id: tags:
``` python
# Texte à déchiffrer
texte_chiffre = """WI RUWWIAI VXVBUPFX TUOV VUOQSXMI OPI NUPPI SPPII"""
# Alphabet
liste_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# Liste des occurrences
liste_occurrence = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# Contiendra le texte déchifré
texte_dechiffre = ""
# Parcours caractère par caractère le fichier
for lettre in texte_chiffre:
# Retourne vrai si "lettre" est un caractère alphabétique (a..z)
if lettre.isalpha():
# Recherche la position (index) de la lettre (conversion en minuscule)
# à décoder dans la liste_alphabet.
# à déchiffrer dans la liste_alphabet.
index = liste_alphabet.index(lettre)
# Incrémenter l'occurence de la lettre correspondante
liste_occurrence[index] = liste_occurrence[index] + 1
# Afficher les occurrences de chaque lettres
for i in range(26):
print(liste_alphabet[i], ":",liste_occurrence[i])
```
%% Cell type:markdown id: tags:
Vous avez maintenant intercepté le message suivant dont vous ne connaissez pas la clé :
```
PGY VGPNGDGY YITJMYYGZD MIYYA GZ NMPGIT PGY MIDTGY QMIPEAY WMT APY GZQMQGZD
WEZDTG PGY QGTUMAZY BGY PIDDGY JTGYOIG FEITZMPAGTGY YEAD OI APY PGY TGJEIYYGZD
BG PGIT JTEJTG DGTTADEATG YEAD OI APY GZNMVAYYGZD WGPIA BG PGITY GZZGUAY ETQGDETAX
GDMAD WVGH PGY VGPNGDGY PG JTGUAGT JMT YM ZMAYYMZWG GD JMT YGY TAWVGYYGY YEIY PG
WEZYIPMD BG U UGYYMPM GD BG U JAYEZ WGD VEUUG JEIYYG JMT P MURADAEZ WEZFITM MNGW
PM ZERPGYYG GD GZQMQGM PGY VMRADMZDY M YETDAT BI JMCY MNGW DEIDGY PGITY LETWGY
AP PGIT BAD OIG P GUJETDMZD JMT PG WEITMQG YIT DEIY PGY JGIJPGY BG PM QMIPG APY
PM YEIUGDDTMAGZD MAYGUGZD DEID GZDAGTG M PGIT GUJATG AP GID B MIDMZD UEAZY BG
JGAZG M PGY JGTYIMBGT OIG PGY VGPNGDGY YEZD BG DEIDGY JMTDY TGYYGTTGY JMT PM
ZMDITG BGY PAGIX B IZ WEDG JMT PG TVAZ LPGING DTGY PMTQG GD DTGY JTELEZB OIA
YGJMTG PGIT DGTTADEATG BG PM QGTUMZAG B IZ MIDTG JMT PG FITM VMIDG UEZDMQZG
OIA Y GPGNG GZDTG PM YGOIMZAG GD P VGPNGDAG B IZ DTEAYAGUG WEDG JMT PG PMW
PGUMZ GD PG TVEZG OIA YGJMTG WGDDG BGTZAGTG BG ZEDTG JTENAZWG AP TGYIPDMAD
BG WGDDG JEYADAEZ OI APY ZG JEINMAGZD ZA Y GDGZBTG MI PEAZ ZA JETDGT LMWAPGUGZD
PM QIGTTG WVGH PGITY NEAYAZY GD W GDMAD IZG WMIYG BG NANG MLLPAWDAEZ JEIT BGY
VEUUGY RGPPAOIGIX PGIT JEJIPMDAEZ ZEURTGIYG GD PM QPEATG OI APY MWOIGTMAGZD BMZY
PM QIGTTG JMT PGIT WEITMQG PGIT LMAYMAGZD TGQMTBGT WEUUG GDTEADGY BGY PAUADGY
OIA MNMAGZD BGIX WGZD OIMTMZDG UAPPGY BG PEZQ YIT WGZD OIMDTG NAZQDY UAPPGY BG PMTQG
```
Reprenez le code précédent et adaptez-le pour compter les occurrences de chaque lettre de ce message.
Reprenez le programme précédent et adaptez-le pour compter les occurrences de chaque lettre de ce message.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:breakpoint
#### Ctrl+enter pour continuer ...........
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 3</h3>
On peut maintenant comparer ces occurrences avec celles de la langue française, fournies ici dans l’histogramme et le tableau suivants :
![](https://gitedu.hesge.ch/info_sismondi/activites-2in-do/-/raw/main/Cryptographie/images/histo_fr.png?inline=false)
| Rang | Caractère | Pourcentage |
| :--------------- |:---------------:| -----:|
| 1 | E | 12.10% |
| 2 | S | 7.11% |
| 3 | R | 6.59% |
| 4 | T | 6.51% |
| 5 | A | 6.39% |
| 6 | L | 6.07% |
| 7 | I | 5.92% |
| 8 | U | 5.02% |
| 9 | O | 4.96% |
| 10 | N | 4.49% |
| 11 | D | 3.67% |
| 12 | C | 3.18% |
| 13 | M | 2.62% |
| 14 | P | 2.49% |
| 15 | G | 1.23% |
| 16 | B | 1.14% |
| 17 | V | 1.11% |
| 18 | H | 1.11% |
| 19 | F | 1.11% |
| 20 | Q | 0.65% |
| 21 | Y | 0.46% |
| 22 | X | 0.38% |
| 23 | J | 0.34% |
| 24 | K | 0.29% |
| 25 | W | 0.17% |
| 26 | Z | 0.15% |
On constate que la lettre la plus utilisée est le E, ensuite S, ensuite R, etc…
En se basant sur cette liste vous pouvez trouver la clé de chiffrage :
1. Sur une feuille de papier, en partant du résultat de l'exercice 2, associez la lettre la plus utilisée de l'alphabet à celle la plus utilisée dans le texte, puis la 2ème plus utilisée, et ainsi de suite jusqu'à la moins utilisée. Cela vous donne une première correspondance.
2. Copiez le code de l'exercice 1.
2. Copiez le programme de l'exercice 1.
3. Utilisez comme clef de base l'alphabet non modifié `"ABCDE..."` car pour l’instant vous ne connaissez pas la clé.
4. Remplacez chaque lettre dans la clef par son équivalent chiffré.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Cela vous donne déjà une première clef approximative. À partir de là, par tentatives successives :
1. Exécutez le code, puis
1. Exécutez le programme, puis
2. modifiez votre clef en inversant la position des lettres. Attention de toujours garder 26 lettres différentes.
3. Continuez à tâtons avec les mots que vous reconnaissez, par exemple s'il vous semble reconnaitre un déterminant ou une double lettre, vous pouvez adapter votre clé pour que faire coincider le message déchiffré.
%% Cell type:code id: tags:
``` python
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment