Aperçu du sujet
Exercice 1 (6 points) Cet exercice porte sur la programmation Python et la cryptographie. Le chiffrement Playfair, popularisé par Lord Playfair et utilisé par l’armée britannique durant les guerres du XXème siècle, est basé sur le chiffrement de paires de lettres (appelées digrammes). Partie A : la clef de chiffrement
Exercice 1 (6 points) Cet exercice porte sur la programmation Python et la cryptographie. Le chiffrement Playfair, popularisé par Lord Playfair et utilisé par l’armée britannique durant les guerres du XXème siècle, est basé sur le chiffrement de paires de lettres (appelées digrammes). Partie A : la clef de chiffrement Ce chiffrement utilise un tableau de 5×5 lettres contenant un mot clef. On remplit le tableau avec les lettres du mot clef (sans doublons), puis on le complète avec les lettres restantes de l’alphabet (sans la lettre W) dans leur ordre alphabétique. Une lettre n’apparait qu’une seule fois dans le tableau. Par exemple, si on choisit comme clef le mot PLAYFAIR, le carré de chiffrement obtenu est le suivant : Figure 1. Carré de chiffrement obtenu avec le mot clef PLAYFAIR On commence par les lettres de la clef (cases blanches) sans les doublons (ici le A) puis on complète le tableau (cases grisées) avec les lettres restantes de l’alphabet, dans l’ordre alphabétique. 1. Donner le carré de chiffrement si la clef est EPREUVEDENSI. On donne ci-dessous le code Python de la fonction creer_liste_clef qui prend en paramètre la clef de chiffrement et renvoie une liste contenant 25 lettres ordonnées de la façon suivante : d’abord les lettres de la clef choisie (sans doublon) puis les lettres de l’alphabet restantes (classées par ordre alphabétique). 25-NSIJ2ME3 Page : 2 / 19 1 def creer_liste_clef(clef): 2 """ 3 hypothèse : la clef ne contient pas la lettre W 4 """ 5 deja_utilises = [] 6 # alphabet sans la lettre W: 7 alphabet = 8 for i in range(len(clef)): 9 if not (clef[i] in deja_utilises): 10 11 for lettre in alphabet: 12 if not lettre in deja_utilises: 13 14 return deja_utilises Exemple : >>> ['P', 'L', 'A', 'Y', 'F', 'I', 'R', 'B', 'C', 'D', 'E', 'G', 'H', 'J', 'K', 'M', 'N', 'O', 'Q', 'S', 'T', 'U', 'V', 'X', 'Z'] 2. Donner l’assertion à insérer en début de la fonction creer_liste_clef afin de s’assurer que l’hypothèse sur la clef soit respectée. On donne ci-dessous le code incomplet de la fonction creer_carre qui prend en paramètre la liste créée par la fonction creer_liste_clef et renvoie le carré de chiffrement. 1 def creer_carre(liste_clef): 2 carre = [[0 for i in range(5)] for j in range(5)] 3 for i in range(25): 4 carre[...][...] = liste_clef[i] 5 return carre Exemple : >>> [['P', 'L', 'A', 'Y', 'F'],