SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON BTS SIO Test : LE CODAGE AFFINE Contexte : La cryptographie est une des disciplines de la cryptologie s’attachant à protéger des messages (assurant confidentialité, authenticité, et intégrité) en s’aidant souvent de secrets ou clés. (source wikipédia). Le codage affine ou chiffre affine est une méthode de cryptographie basée sur un chiffrement par substitution. Il s’agit d’un code simple mais aussi un des plus faciles à casser. Le chiffrement est la transformation à l’aide d’une clé, d’un message en clair (texte clair) en un message incompréhensible (texte chiffré) pour celui qui ne dispose pas de la clé de déchiffrement (encryption key). Objectif : On souhaite analyser le principe du codage affine et réaliser un programme rédigé en python pour coder un message. Principe du codage affine : - Chaque lettre de l’alphabet est associée à son rang : A est associé à 1, B à 2……..Z à 25. Soit x, entier qui correspond à ce nombre. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 - 2 entiers a et b sont choisis comme clé. Chaque lettre est d’abord remplacée par x puis chiffrée par le calcul du reste de la division euclidienne par 26 de l‘expression affine (ax+b), soit (ax+b)%26. Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 1 BTS SIO SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON Exemple : Pour chiffrer le mot CODE grâce au code affine de clé (17,3), il faut procéder ainsi : a) CODE 2 ; 14 ;3 ;4 b) y = 17x + 3 37 ; 241 ; 54 ; 71 c) 37%26 = 11 ; 241%26= 7 ; 54%26 = 2 ; 71%26 =19. d) Retranscription en lettres L H C T Le codage affine de clé (17,3) de ‘CODE’ est ‘LHCT’. Activité: On souhaite écrire un programme qui code un message avec la clé (17,3). Ce programme se composera de 3 fonctions : - convertirChaine_enListe(message) qui transforme une chaîne de caractères en une liste de nombres. - convertirListe_enListeCode(listeNombres) qui transforme une liste de nombres en une liste de nombres codée. - convertirListe_enChaine(listeNombres) qui transforme une liste de nombres en une chaîne de caractères. et du programme principal qui devra : - lire une chaîne de caractères dans un message - convertir le message en une liste de nombres en appelant la fonction convertirChaine_enListe(message). - convertir la liste de nombres en une liste de nombres codés en appelant la fonction convertirListe_enListeCode( liste_de_nombres) - convertir la liste de nombres codée en une chaîne de caractères en appelant la fonction convertirListe_enChaine(liste_de_nombres) Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 2 SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON BTS SIO Le programme principal est le suivant : message=input("Entrer le message à coder:\n") listeNombres=convertirChaine_enListe(message) print(listeNombres) Réaliser la fonction convertirChaine_enListe(mes) : def convertirChaine_enListe(mes) : …………………………………………. return liste Réaliser la fonction convertirListe_enListeCode(listeNombres) Ajouter l’appel de cette fonction dans le programme principal ; la fonction retourne une liste appelée listeNombresCodes. Traduire en Python l’algorithme suivant : fonction convertirListe_enListeCode(listedeNombres) : l longueur de liste-de-Nombres liste [ ] Pour i allant de 0 à l : nombreCode (17*listeNombres[i] +3)%26 ajouter à liste (nombreCode) retourne(liste) Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 3 BTS SIO SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON Réaliser la fonction convertirListe_enChaine(listeNombres) Ajouter l’appel de cette fonction dans le programme principal ; la fonction retourne une liste appelée ChaineCodes. Traduire en Python l’algorithme suivant : fonction convertirListe_enChaine(listeNombres): tableau [”A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”,”I”,”J”,”K”,”L”,”M”,”N”,”O”,”P”,”Q”,”R”,”S”,”T”,”U”,”V”,” W”,”X”, l longueur de listeNombres message ” ” Pour i allant de 1 à l : numero liste de nombres[i] lettretableau[numero - 1] message message + lettre retourne(message) Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 4