Cryptographie

La cryptographie est l'ensemble des manières qui permettent de sécuriser des informations.

On peut le faire simplement en python ou utiliser des modules pour chiffrer de manière plus complexe des messages.

Il existe plein de manière de chiffrer un message :

  • inverser les caractères
  • Le Code de César : décaler les lettres ( A devient C, B devient D,... Z devient B etc)
  • convertir le message dans une autre langue ou en binaire
  • combiner les effets !!!

On peut utiliser du chiffrage professionnel avec des bibliothèques :

  • Chiffrement symétrique (une clef pour chiffrer et déchiffrer)
  • Chiffrement asymétrique

On peut aussi chiffrer des fichiers entiers !

Inverser l'ordre des lettres d'un message

Premier truc un peu enfantin mais qui permet de nous échauffer sur la manipulation de chaines de caractères : inverser l'order des lettres !

On prend chaque lettre du message une à une et on les ajoute à l'envers:

  • "p"
  • "ap"
  • "tap"
  • "atap"
  • "tatap"
  • "etatap"

Pour déchiffrer le message, il suffit de refaire passer le message chiffrer dans le même programme !!

Tu peux maintenant essayer d'inverser un message et le déchiffrer !

Le code de César

Le principe : remplacer chaque lettre par une autre selon un certain décalage. Pour l'exemple suivant, on décale chaque lettre de 3 : A devient D, B devient E, etc, etc...

Pour le faire, on va utiliser le code ASCII.

Le code ASCII (American Standard Code for Information Interchange) est la norme d'encodage informatique des caractères qui associe un nombre à un caractère, par exemple "d" est le caractère numéro 100 :

En python, on peut récupérer le code ascii d'un caractère avec la commande ord()

Et inversement trouver quel est le caractère numéro 48 avec la commande chr()

Pour décaler les lettres de 3 crans, on va:

    • Transformer chaque lettre en son code ASCII (un nombre entier)
    • Ajouter 3 à ce nombre
    • Retransformer ce nombre en la nouvelle lettre qui correspond à la nouvelle valeur
    • L'ajouter au message codé

Ce code est assez facile à casser maintenant car il suffit de tester les différentes possibilités, mais à l'époque où il était utilisé le temps qu'il fallait pour le casser était trop grand pour être utile (si le message codé a un impact le soir même ou le lendemain il n'y a pas assez de temps pour le casser à la main...)

Si on a un message codé assez grand, on peut essayer de trouver la clé en étudiant la fréquence des lettres (en français, le "e" est la lettre la plus utilisée (fréquence d'apparition : 17.26 % ) donc il suffit de trouver la lettre la plus utilisée et faire la différence avec le "e" (code ascii 101) pour trouver la clé (ou essayer la 2 ème plus présente))

Tu peux maintenant essayer de créer ton propre code de César !

Pour aller plus loin, tu peux utiliser le modulo ( % en python) pour boucler parmi les lettres uniquement !!

Convertir le message en binaire

On peut aussi convertir notre message en binaire !

Le binaire n'est qu'une manière de compter.

Nous comptons d'habitude en base 10 (car on a 10 doigts) c'est à dire avec 10 chiffres (0 à 9).

En binaire on compte avec 2 chiffres (0 et 1). Compter en binaire donne : 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, ...

Donc passer notre message en binaire c'est :

    • convertir les lettres en nombre (leur code ASCII comme avec le code de César)
    • puis convertir ce nombre de décimal en binaire ( 89 devient 01011001)
    • ajouter la séquence de 0 et 1 au message codé.

les lettres sont stockés sur un octet (8 bits) donc on veut récupérer le code de chaque lettre dans une séquence de 8 "0" et "1".

On utilise la fonction format() pour convertir le nombre en sa représentation binaire (une chaîne de caractères) et on utilise le format "08b" pour l'avoir sur 8 bits.

Pour résumer, il y a beaucoup de possibilités !

Tu peux maintenant essayer de coder un message en binaire !

Chiffrement robuste

On va maintenant aller un peu plus loin et utiliser des modules pour chiffrer nos message !