Mathématiques avec B.MOREAU

Bienvenue sur la page du Club Maths en Ligne



Projet 1: La cryptographie

  1. Cryptographie - code secret: les débuts du codage

  2. L’homme a voulu, depuis fort longtemps, protéger ces écrits, son savoir, une information. Au fil des siècles, les méthodes de chiffrements sont devenues de plus en plus difficiles à “casser”.
    Les premières traces de chiffrements remontent au XVIe siècle avant notre ère. Il s’agit d’une tablette en argile retrouvé en Irak où un potier avait chiffré une recette secrète en supprimant les consonnes et en modifiant l’orthographe des mots.

    Un peu plus tard, à partir du Ve siècle avant J.C., on retrouve chez les Hébreux ce que nous appellerons le chiffre d’Atbash. Il s’agit d’une méthode de substitution mono alphabétique inversée: c’est-à-dire que, avec notre alphabet latin, on remplace le A par un Z, le B par un Y, le C par X et ainsi de suite.
    Ainsi, le mot MATHEMATIQUES devient NZGSVNZGRJFVH

    Pour déchiffrer ce code, il suffit d’appliquer exactement la même méthode.
    On remarque que le chiffrement est simple, mais le niveau d’alphabétisation de la population le rendait suffisant pour l’époque.
    Remarque: le mot Atbash vient de lettres de l’aphabet hébreu: la première lettre Aleph, suivie de la dernière, Taw, puis de la seconde, Bet, et enfin de l'avant-dernière, Shin.

    Ayant à notre disposition des moyens informatiques qui nous permettent de pouvoir décrypter rapidement un message, nous allons les utiliser. Pour le chiffre d’Atbash, je vais vous donner le code sous Python.
    L’objectif ici, outre mettre en œuvre ce code et l’appliquer, sera de bien comprendre chaque ligne afin de pouvoir mettre en pratique ce savoir un peu plus tard pour d’autres codes.

    Je vais vous proposer 2 codes possibles, analysez-les bien et testez-les avec le mot mathematiques.

    Code 1:

    alphabet = list('abcdefghijklmnopqrstuvwxyz')
    alphabet2 = list('zyxwvutsrqponmlkjihgfedcba')

    phrase = input("Ecrivez la phrase a decoder en supprimant les espaces:")
    phrase_decod=[]

    for lettre in phrase:
         phrase_decod.append(alphabet2[alphabet.index(lettre)])

    print ('La phrase codee est:',''.join(str(elem) for elem in phrase_decod))


    Code 2:

    alphabet = list('abcdefghijklmnopqrstuvwxyz')

    phrase = input("Ecrivez la phrase a decoder en supprimant les espaces:")
    phrase_decod=[]
    for lettre in phrase:
         phrase_decod.append(alphabet[(25-alphabet.index(lettre))])

    print ('La phrase codee est:',''.join(str(elem) for elem in phrase_decod))

    Un peu de Python pour comprendre:

    Les alphabets utilisés sont stockés sous forme de liste sous Python.
    Pour créer un liste sous Python, rien de plus simple, nous utilisons la commande list():

    ex.:
    l=list(‘abcd’)

    On a créé ainsi une liste constituée de la chaîne de caractère abcd. Les guillemets sont importants ici, car ils permettent de dire à Python que c’est une chaîne de caractères ou string (str). Quand vous utilisez des lettres qui ne sont pas des variables, pensez bien à mettre des ' '...
    L’avantage des listes est que nous pouvons demander à Python la place d’une caractère dans sa liste, nous pouvons enlever des caractères ou en rajouter.

    Voici quelques commandes intéressantes:
    • l.index('b') nous renvoie 1. La place du caractère 'b' dans la liste l, ici 1. Pourquoi 1 et non 2??? Et bien car la place 1 est noté 0 pour Python…
    • l.append('e'): permet de rajouter le caractère 'e' à notre liste.
    • La fonction .join permet de joindre les éléments de notre liste dans une même chaîne de caractères.
  3. Le chiffre de César
  4. Comment déchiffrer ce code