from random import choice
# Initialisation des variables
codes = ".-+-...+-.-.+-..+.+..-.+--.+....+..+.---+-.-+.-..+--+-.+---+.--.+--.-+.-.+...+-+..-+...-+.--+-..-+-.--+--..".split("+")
chiffres = [chr(v) for v in range(48, 58)]
alphabet = [chr(v) for v in range(65,91)]
alphanum = chiffres + alphabet
morse = dict(zip(alphabet, codes))
def dicoChiffrement():
dico = {'.':[], '-':[], '+':[]}
cles = '.-+'
possibilites = list(alphanum) # Copie de alphanum
for i in range(36):
valeur = choice(possibilites)
possibilites.remove(valeur)
dico[cles[i % 3]].append(valeur)
return dico
def chiffrePollux(phrase:str):
phrase = phrase.upper()
dico = dicoChiffrement() # Création du dictionnaire
chiffre = ''
for c in phrase:
if 'A' <= c <= 'Z':
codeMorse = morse[c] + '+'
codageLettre = ''
for v in codeMorse:
codageLettre += choice(dico[v])
chiffre += codageLettre
return chiffre, dico
def dechiffrePollux(chiffre:str, dico):
# Traduction chiffré vers Morse
enMorse = chiffre.upper()
for k, v in dico.items():
for c in v: enMorse = enMorse.replace(c, k)
# Traduction Morse vers message clair
clair = ''
cleMorse = list(morse.keys())
valMorse = list(morse.values())
for m in enMorse.split('+'):
if m != '':
clair += cleMorse[valMorse.index(m)]
return clair
def enColonne(chiffre):
for i in range(0, len(chiffre), 5):
if i % 4 == 0 and i > 0: print()
print(chiffre[i:i + 5], end='\t')
message = 'rendezvouscesoiravingtheuresplacevictorhugo'
chiffre, dico = chiffrePollux(message)
print('Texte chiffré :')
enColonne(chiffre)
print('\nDictionnaire utilisé :')
print(dico)
print('Déchiffrement :')
print(dechiffrePollux(chiffre, dico))