| @@ -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. | |||