瀏覽代碼

Ajout des consignes pour l'atelier de l'épisode 6

master
Dimitri Merejkowsky 5 年之前
父節點
當前提交
0e0c4ba1c1
共有 1 個文件被更改,包括 110 次插入12 次删除
  1. +110
    -12
      saison-2/sessions/python-S02-E06.md

+ 110
- 12
saison-2/sessions/python-S02-E06.md 查看文件

@@ -102,23 +102,19 @@ https://docs.python.org/fr/3/library/index.html
Mettez ce lien dans vos favoris - il vous sera très utile.


# sys
# Le module sys

Contient notamment `sys.argv`, une liste de chaînes de caractères, qui
n'est *jamais vide*.
Le module `sys` est disponible par défaut, et contient plusieurs variables
utiles.

Dans l'interpréteur intéractif, le premier élément est le
chemin du binaire python:

```bash
$ python3
>>> import sys
>>> sys.argv
["/usr/bin/python3"]
```
On va parler ici de l'une d'entre elles: `argv`.

# sys.argv avec un fichier

`sys.argv` est une liste de chaînes de caractères, qui
n'est *jamais vide*, et est utile quand on lance python
avec un fichier source:

```python
# Dans lancez_moi.py
import sys
@@ -390,3 +386,105 @@ Réponse 1. `argv` a une taille 1, et on accède à l'index 1.
#

\center \huge Atelier

# Introduction

Vous allez jouer le rôle successivement d'un espion Bordure, puis d'un
espion Syldave (les noms viennent de l'univers de Tintin), et l'atelier
comporte trois parties.

# Chiffrement v1

Vous devez implémenter le script suivant, nommé `chiffrer.py`.

Il se lance ainsi:

```bash
$ python chiffrer.py n MESSAGE
```

où `n` est en entier entre 0 et 25, et `MESSAGE` une chaîne de caractères
non accentués.

L'algorithme est le suivant:

* Supprimer les espaces et les signes de ponctuation du message
* Remplacer chaque lettre par une majuscule
* Décaler chaque lettre du message en utilisant le pas `n`.

Par exemple, si le message est `BONJOUR` et le pas 2, le message
chiffré devient `DQPLQWT`.

Notez que si on décale la lettre `Y` avec un pas de 3, on doit obtenir
`B` (il faut effectuer une rotation)


# Chiffrement v2

Pour le chiffrement version 2, il faut maintenant utiliser une *clé* `k`
à la place de l'entier `n`.

Le script devient:

```bash
$ python chiffrer2.py k MESSAGE
```

Pour chiffrer le message, on continue à décaler chaque lettre d'un pas,
mais la valeur du pas n'est plus constante. À la place, elle est
donnée par les lettres de la clé.

Par exemple, avec la clé 'ACB', le pas prend les valeurs `0, 2, 1, 0, 2, 1` etc.

En chiffrant `tintin` avec la clé `ACB`, on doit obtenir `TKOTKO`.

# Casser le chiffrement

Maintenant vous jouez le rôle d'un espion Syldave. Voici ce que vous avez
à votre disposition:

* Le script `chiffrer2.py`
* Le message secret suivant: `IHDXUVZKRISCBNJWBXIDUWVVODUBPRFQRIRGBUR`

Vous savez également que:

* La clé utilisée contient 3 lettres
* Le message parle du maréchal Plekszy-Gladz

Vous devez déchiffrer le message, et obtenir la valeur de la clé.

# Indications - 1

Quelques indices:

* La fonction `ord` permet de convertir une lettre en son code ASCII:

`ord('A') = 65, ord('B') = 66, ... ,ord('Z') = 90`

* La fonction `chr` permet de convertir un entier en lettre:

`chr(65) = 'A', chr(66) = 'B', ..., chr(90) = 'Z'`

# Indications - 2

* L'opérateur `%` permet de s'assurer qu'une valeur est comprise dans un intervalle donné.

`0 % 26 = 0, 1 % 26 = 1, ..., 26 % 26 = 0`

`27 % 26 = 1, 28 % 26 = 2, ...`

* Toutes les chaînes de caractères en Python contiennent les méthodes `is_alpha()` et `upper()`:

`"a".is_alpha() = True, "!".is_alpha() = False`

`"Message Important".upper() = "MESSAGE IMPORTANT"`

# Conseils pour l'implémentation

* Dans `chiffrer.py`, assurez-vous d'avoir une fonction `décale_lettre` prenant une lettre et un pas. Cela facilitera l'implémentation de `chiffrer2.py`.

* Pour la dernière partie:
* Pour casser le message, vous pouvez partir de `chiffrer2.py`. Il y a très peu de code à changer ...
* Il y a $26^3$ clés possibles. Un ordinateur n'aura aucun mal à les essayer toutes une par une (ça ne fait "que" 17 000 possibilités environ)
* Quand vous aurez déchiffré le message, vérifiez que votre clé est correcte, en essayant de le re-chiffrer avec l'algorithme v2 - vous devez retomber sur le message chiffré initial.