89 lines
3.4 KiB
Python
Executable File
89 lines
3.4 KiB
Python
Executable File
#!/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) |