Skip to content
Snippets Groups Projects
Commit cb1fb79d authored by mschiess's avatar mschiess
Browse files

version MS du NB cesar

parent dc1567d9
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 de César
Dans ce chapitre, nous allons voir comment déchiffrer en python un message chiffré grâce au chiffrement de César
%% 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>
On fournit une fonction `decale_car(car, decal)`qui renvoie le caractère `car` décalé (à gauche) dans l'alphabet d'un décalage `decal`.
Utilisez la fonction `decale_car` (voir les exemples dans le commantaire de la fonction) pour répondre aux questions suivantes: Testez-là pour décaler (répondre ci-dessous) :
1) Quelle lettre obtient-on si on décale B de 3 caractère ?
2) Quelle lettre obtient-on si on décale X de 10 caractère ?
%% Cell type:code id: tags:
``` python
def decacle_car(car, decal):
'''
Fonction qui permet d'obtenir le caractère qui se trouve à unp
position décalée dans l'alphabet
Paramètres :
car (str) : le caractère qu'on veut décaler
decal (int) : le décalage
Valeur retournée (return) :
car_decal (str) : le caractère décalé
Exemples:
>>> decacle_car('e', 2)
'c'
>>> decacle_car('n', 1)
'm'
'''
pos_a = ord("a") # position du 'a' dans la table ASCII
pos_car = ord(car.lower())# position de car en minuscule dans la table ASCII
caractere_decale = chr((pos_car - decal - pos_a) % 26 + pos_a)
return caractere_decale
# compléter les ...
car = decacle_car(..., ...)
print("Si on décale le B de 3 on obtient", ...)
car = ...
print(..., ...)
```
%% Cell type:raw id: tags:
Quelle lettre obtient-on si on décale B de 3 caractère ?
Ma réponse :
Quelle lettre obtient-on si on décale X de 10 caractère ?
Ma réponse :
%% 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 fournit une fonction `dechiffre_cesar(msg_chiffre, cle)` qui permet de dechiffrer un message en utilisant le chiffre de cesar.
Le programme suivant utilise `dechiffre_cesar(msg_chiffre, cle)`, mais comme la clé n'est pas connue on obtient pas le message dechiffré (ici un clé correspondant un décalage de 13 est utilisée). Changez la valeur du décalage à la main pour tester toutes les clés possibles et trouver quelle est la clé et le message déchiffré.
%% Cell type:code id: tags:
``` python
def dechiffre_cesar(msg_chiffre, cle):
'''
Fonction qui permet de dechiffrer un message en utilisant le
chiffre de cesar
Paramètres :
msg_chiffre (str) : le message chiffre
cle (int) : le décalage (la clé du chiffre)
Valeur retournée (return) :
msg_dechiffre (str) : le message dechiffré avec le décalage
donné par le parmètre clé
Exemples:
>>> decacle_car('cheuh', 3)
'zebre'
'''
msg_dechiffre = ''
for caractere in msg_chiffre: # pour chaque caractère du message
if caractere != ' ': # sauf les espaces
caractere_decale = decacle_car(caractere, cle)
msg_dechiffre = msg_dechiffre + caractere_decale
else:
msg_dechiffre = msg_dechiffre + caractere
return msg_dechiffre
# Utilisation de la fonction
message_chiffre = "un bxunru karuun bda brbvxwmr"
print("Message chiffré : ", message_chiffre)
decalage = 13
print("Valeur du décalage:", decalage)
message_dechiffre = dechiffre_cesar(message_chiffre, decalage)
print("Message déchiffré : ",message_dechiffre)
```
%% 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>
Utilisez la fonction `dechiffre_cesar(msg_chiffre, cle)` de l'exercice précédant pour automatiser le déchiffrage du message `et engx xlm iexbgx vxmmx gnbm`.
Votre programme doit tester, automatiquement, toutes les clés possibles et afficher à chaque fois ce que serait le message déchiffré avec cette clé afin de trouver la bonne clé, et *in fine*, le message déchiffré.
%% Cell type:code id: tags:
``` python
decalage = 0
message_chiffre = "et engx xlm iexbgx vxmmx gnbm"
print("Message chiffré : ", message_chiffre)
message_dechiffre = dechiffre_cesar(message_chiffre, decalage)
print("Valeur du décalage:", decalage)
print("Message déchiffré : ", msg_dechiffre)
```
%% 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 4 </h3>
Réutilisez le même programme pour déchiffrer le message suivant par force brute :
```
"""qrznva, qrf y'nhor, n y'urher bh oynapuvg yn pnzcntar,
wr cnegvenv. ibvf-gh, wr fnvf dhr gh z'nggraqf.
w'venv cne yn sberg, w'venv cne yn zbagntar.
wr ar chvf qrzrhere ybva qr gbv cyhf ybatgrzcf.
wr znepurenv yrf lrhk svkrf fhe zrf crafrrf,
fnaf evra ibve nh qrubef, fnaf ragraqer nhpha oehvg,
frhy, vapbaah, yr qbf pbheor, yrf znvaf pebvfrrf,
gevfgr, rg yr wbhe cbhe zbv fren pbzzr yn ahvg.
wr ar ertneqrenv av y'be qh fbve dhv gbzor,
av yrf ibvyrf nh ybva qrfpraqnag iref unesyrhe,
rg dhnaq w'neevirenv, wr zrggenv fhe gn gbzor
ha obhdhrg qr ubhk ireg rg qr oehlrer ra syrhe."""
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
<div class = "alert alert-danger">
# Cours avec solution
</div>
<div class = "alert alert-block alert-warning">
### A faire avant de commençer
**Cliquez sur Exécuter tout** dans le menu **Cellule**.
</div>
%% Cell type:markdown id: tags:
# Chiffrement symétrique - Le chiffrement de César
Dans ce chapitre, nous allons voir comment déchiffrer en python un message chiffré grâce au chiffrement de César
%% 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>
On fournit une fonction `decale_car(car, decal)`qui renvoie le caractère `car` décalé (à gauche) dans l'alphabet d'un décalage `decal`.
Utilisez la fonction `decale_car` (voir les exemples dans le commantaire de la fonction) pour répondre aux questions suivantes: Testez-là pour décaler (répondre ci-dessous) :
1) Quelle lettre obtient-on si on décale B de 3 caractère ?
2) Quelle lettre obtient-on si on décale X de 10 caractère ?
%% Cell type:markdown id: tags:
<div class = "alert alert-block alert-warning">
### Solution
</div>
%% Cell type:code id: tags:
``` python
def decacle_car(car, decal):
'''
Fonction qui permet d'obtenir le caractère qui se trouve à unp
position décalée dans l'alphabet
Paramètres :
car (str) : le caractère qu'on veut décaler
decal (int) : le décalage
Valeur retournée (return) :
car_decal (str) : le caractère décalé
Exemples:
>>> decacle_car('e', 2)
'c'
>>> decacle_car('n', 1)
'm'
'''
pos_a = ord("a") # position du 'a' dans la table ASCII
pos_car = ord(car.lower())# position de car en minuscule dans la table ASCII
caractere_decale = chr((pos_car - decal - pos_a) % 26 + pos_a)
return caractere_decale
# compléter les ...
car = decacle_car('B', 3)
print("Si on décale le B de 3 on obtient", car)
car = decacle_car('X', 10)
print("Si on décale le X de 10 on obtient", car)
```
%% Cell type:raw id: tags:
Quelle lettre obtient-on si on décale B de 3 caractère ?
Ma réponse : Y
Quelle lettre obtient-on si on décale X de 10 caractère ?
Ma réponse : N
%% 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 fournit une fonction `dechiffre_cesar(msg_chiffre, cle)` qui permet de dechiffrer un message en utilisant le chiffre de cesar.
Le programme suivant utilise `dechiffre_cesar(msg_chiffre, cle)`, mais comme la clé n'est pas connue on obtient pas le message dechiffré (ici un clé correspondant un décalage de 13 est utilisée). Changez la valeur du décalage à la main pour tester toutes les clés possibles et trouver quelle est la clé et le message déchiffré.
%% Cell type:markdown id: tags:
<div class = "alert alert-block alert-warning">
### Solution
</div>
%% Cell type:code id: tags:
``` python
def dechiffre_cesar(msg_chiffre, cle):
'''
Fonction qui permet de dechiffrer un message en utilisant le
chiffre de cesar
Paramètres :
msg_chiffre (str) : le message chiffre
cle (int) : le décalage (la clé du chiffre)
Valeur retournée (return) :
msg_dechiffre (str) : le message dechiffré avec le décalage
donné par le parmètre clé
Exemples:
>>> decacle_car('cheuh', 3)
'zebre'
'''
msg_dechiffre = ''
for caractere in msg_chiffre: # pour chaque caractère du message
if caractere != ' ': # sauf les espaces
caractere_decale = decacle_car(caractere, cle)
msg_dechiffre = msg_dechiffre + caractere_decale
else:
msg_dechiffre = msg_dechiffre + caractere
return msg_dechiffre
# Utilisation de la fonction
message_chiffre = "un bxunru karuun bda brbvxwmr"
print("Message chiffré : ", message_chiffre)
decalage = 9
print("Valeur du décalage:", decalage)
message_dechiffre = dechiffre_cesar(message_chiffre, decalage)
print("Message déchiffré : ",message_dechiffre)
```
%% 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>
Utilisez la fonction `dechiffre_cesar(msg_chiffre, cle)` de l'exercice précédant pour automatiser le déchiffrage du message `et engx xlm iexbgx vxmmx gnbm`.
Votre programme doit tester, automatiquement, toutes les clés possibles et afficher à chaque fois ce que serait le message déchiffré avec cette clé afin de trouver la bonne clé, et *in fine*, le message déchiffré.
%% Cell type:markdown id: tags:
<div class = "alert alert-block alert-warning">
### Solution
</div>
%% Cell type:code id: tags:
``` python
message_chiffre = "et engx xlm iexbgx vxmmx gnbm"
print("Message chiffré : ", message_chiffre)
for k in range(26):
message_dechiffre = dechiffre_cesar(message_chiffre, k)
print("Valeur du décalage:", k)
print("Message déchiffré : ", message_dechiffre)
```
%% Cell type:code id: tags:
``` python
decalage = 19
print("Valeur du décalage:", decalage)
message_dechiffre = dechiffre_cesar(message_chiffre, decalage)
print("Message déchiffré : ",message_dechiffre)
```
%% 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 4 </h3>
Réutilisez le même programme pour déchiffrer le message suivant par force brute :
```
"""qrznva, qrf y'nhor, n y'urher bh oynapuvg yn pnzcntar,
wr cnegvenv. ibvf-gh, wr fnvf dhr gh z'nggraqf.
w'venv cne yn sberg, w'venv cne yn zbagntar.
wr ar chvf qrzrhere ybva qr gbv cyhf ybatgrzcf.
wr znepurenv yrf lrhk svkrf fhe zrf crafrrf,
fnaf evra ibve nh qrubef, fnaf ragraqer nhpha oehvg,
frhy, vapbaah, yr qbf pbheor, yrf znvaf pebvfrrf,
gevfgr, rg yr wbhe cbhe zbv fren pbzzr yn ahvg.
wr ar ertneqrenv av y'be qh fbve dhv gbzor,
av yrf ibvyrf nh ybva qrfpraqnag iref unesyrhe,
rg dhnaq w'neevirenv, wr zrggenv fhe gn gbzor
ha obhdhrg qr ubhk ireg rg qr oehlrer ra syrhe."""
```
%% Cell type:markdown id: tags:
<div class = "alert alert-block alert-warning">
### Solution
</div>
%% Cell type:code id: tags:
``` python
def dechiffre_cesar(msg_chiffre, cle):
'''
Fonction qui permet de dechiffrer un message en utilisant le
chiffre de cesar
Paramètres :
msg_chiffre (str) : le message chiffre
cle (int) : le décalage (la clé du chiffre)
Valeur retournée (return) :
msg_dechiffre (str) : le message dechiffré avec le décalage
donné par le parmètre clé
Exemples:
>>> decacle_car('cheuh', 3)
'zebre'
'''
msg_dechiffre = ''
for caractere in msg_chiffre: # pour chaque caractère du message
if caractere.isalpha(): # sauf les espaces
caractere_decale = decacle_car(caractere, cle)
msg_dechiffre = msg_dechiffre + caractere_decale
else:
msg_dechiffre = msg_dechiffre + caractere
return msg_dechiffre
message_chiffre = """qrznva, qrf y'nhor, n y'urher bh oynapuvg yn pnzcntar,
wr cnegvenv. ibvf-gh, wr fnvf dhr gh z'nggraqf.
w'venv cne yn sberg, w'venv cne yn zbagntar.
wr ar chvf qrzrhere ybva qr gbv cyhf ybatgrzcf.
wr znepurenv yrf lrhk svkrf fhe zrf crafrrf,
fnaf evra ibve nh qrubef, fnaf ragraqer nhpha oehvg,
frhy, vapbaah, yr qbf pbheor, yrf znvaf pebvfrrf,
gevfgr, rg yr wbhe cbhe zbv fren pbzzr yn ahvg.
wr ar ertneqrenv av y'be qh fbve dhv gbzor,
av yrf ibvyrf nh ybva qrfpraqnag iref unesyrhe,
rg dhnaq w'neevirenv, wr zrggenv fhe gn gbzor
ha obhdhrg qr ubhk ireg rg qr oehlrer ra syrhe."""
print("Message chiffré : ", message_chiffre)
for k in range(26):
message_dechiffre = dechiffre_cesar(message_chiffre, k)
print()
print("Valeur du décalage:", k)
print("Message déchiffré : ", message_dechiffre)
```
%% Cell type:code id: tags:
``` python
decalage = 13
print("Valeur du décalage:", decalage)
message_dechiffre = dechiffre_cesar(message_chiffre, decalage)
print("Message déchiffré : ",message_dechiffre)
```
%% Cell type:code id: tags:
``` python
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment