Python & Cryptographie partie 4 : Chiffre de Pollux

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))

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *