#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Jan 7 20:03:19 2021 @author: pjoulaud """ from random import randint def genere_table(): """ Fonction qui génère aléatoirement une table de correspondance entre lettres Les clés correspondent à chaque lettre de l' alphabet et les valeurs à une autre lettre prise au hasard. Arguments : - Aucun Retourne : - dico_chiffrement de type dict >>> toto = list(genere_table().keys()) >>> toto.sort() >>> print(toto) ['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'] >>> toto = list(genere_table().values()) >>> toto.sort() >>> print(toto) ['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'] """ dico_chiffrement = {} toutes_les_lettres = ('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') liste_lettres = list(toutes_les_lettres) for lettre in toutes_les_lettres: position = randint(0, len(liste_lettres)-1) lettre_correspondante = liste_lettres[position] dico_chiffrement[lettre] = lettre_correspondante liste_lettres.remove(lettre_correspondante) return dico_chiffrement def code_par_substitution(texte, table): """ Fonction qui code un message grâce à une table de correspondance. Arguments : - texte : Message à coder de type str - table : Table de correspondance de type dict Retourne : - texte_chiffre : Message codé de type str >>> ma_table = {'A': 'H', 'B': 'A', 'C': 'F', 'D': 'M', 'E': 'D', 'F': 'T',\ 'G': 'Z', 'H': 'W', 'I': 'L', 'J': 'X', 'K': 'G', 'L': 'S', 'M': 'I',\ 'N': 'V', 'O': 'R', 'P': 'C', 'Q': 'O', 'R': 'E', 'S': 'N', 'T': 'Y',\ 'U': 'U', 'V': 'K', 'W': 'B', 'X': 'J', 'Y': 'Q', 'Z': 'P'} >>> code_par_substitution("BONJOUR TOUT LE MONDE", ma_table) 'ARVXRUE YRUY SD IRVMD' """ texte_chiffre = "" for lettre in texte : if lettre in ('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'): texte_chiffre += table[lettre] else: texte_chiffre += lettre return texte_chiffre def decode_par_substitution(texte, table): """ Fonction qui décode un message grâce à une table de correspondance. Arguments : - texte : Message codé de type str - table : Table de correspondance de type dict Retourne : - texte_chiffre : Message décodé de type str >>> ma_table = genere_table() >>> decode_par_substitution(code_par_substitution("BONJOUR TOUT LE MONDE", ma_table), ma_table) 'BONJOUR TOUT LE MONDE' """ nouvelle_table = {} for cle, valeur in table.items(): nouvelle_table[valeur]=cle return code_par_substitution(texte, nouvelle_table) if __name__=='__main__': import doctest doctest.testmod() #ma_table_chiffrement = genere_table() #print(ma_table_chiffrement) #message_code = code_par_substitution("BONJOUR TOUT LE MONDE", ma_table_chiffrement) #print(message_code) #message_decode = decode_par_substitution(message_code, ma_table_chiffrement) #print(message_decode)