TP04
This commit is contained in:
89
TP04.py
Normal file
89
TP04.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import string
|
||||||
|
|
||||||
|
def generer_matrice():
|
||||||
|
alphabet = string.ascii_uppercase
|
||||||
|
matrice = []
|
||||||
|
for i in range(len(alphabet)):
|
||||||
|
ligne = alphabet[i:] + alphabet[:i]
|
||||||
|
matrice.append(list(ligne))
|
||||||
|
return matrice
|
||||||
|
|
||||||
|
def afficher_matrice(matrice):
|
||||||
|
print("\nMatrice de Vigenère :")
|
||||||
|
print(" " + " ".join(string.ascii_uppercase))
|
||||||
|
for i, ligne in enumerate(matrice):
|
||||||
|
print(f"{string.ascii_uppercase[i]}: {' '.join(ligne)}")
|
||||||
|
print()
|
||||||
|
|
||||||
|
def normaliser_texte(texte):
|
||||||
|
return "".join([c.upper() for c in texte if c.isalpha() or c == " "])
|
||||||
|
|
||||||
|
def etendre_clef(clef, texte):
|
||||||
|
clef = clef.replace(" ", "").upper()
|
||||||
|
resultat = ""
|
||||||
|
index_clef = 0
|
||||||
|
for c in texte:
|
||||||
|
if c == " ":
|
||||||
|
resultat += " "
|
||||||
|
else:
|
||||||
|
resultat += clef[index_clef % len(clef)]
|
||||||
|
index_clef += 1
|
||||||
|
return resultat
|
||||||
|
|
||||||
|
def chiffrer(message, clef, matrice):
|
||||||
|
message = normaliser_texte(message)
|
||||||
|
clef_etendue = etendre_clef(clef, message)
|
||||||
|
alphabet = string.ascii_uppercase
|
||||||
|
message_chiffre = ""
|
||||||
|
|
||||||
|
for m, k in zip(message, clef_etendue):
|
||||||
|
if m == " ":
|
||||||
|
message_chiffre += " "
|
||||||
|
else:
|
||||||
|
ligne = alphabet.index(k)
|
||||||
|
colonne = alphabet.index(m)
|
||||||
|
message_chiffre += matrice[ligne][colonne]
|
||||||
|
return message_chiffre
|
||||||
|
|
||||||
|
def dechiffrer(message_chiffre, clef, matrice):
|
||||||
|
clef_etendue = etendre_clef(clef, message_chiffre)
|
||||||
|
alphabet = string.ascii_uppercase
|
||||||
|
message_clair = ""
|
||||||
|
|
||||||
|
for c, k in zip(message_chiffre, clef_etendue):
|
||||||
|
if c == " ":
|
||||||
|
message_clair += " "
|
||||||
|
else:
|
||||||
|
ligne = alphabet.index(k)
|
||||||
|
colonne = matrice[ligne].index(c)
|
||||||
|
message_clair += alphabet[colonne]
|
||||||
|
return message_clair
|
||||||
|
|
||||||
|
def main():
|
||||||
|
matrice = generer_matrice()
|
||||||
|
afficher_matrice(matrice)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
choix = input("Choisissez une opération ([C]hiffrer / [D]échiffrer / [Q]uitter) : ").upper()
|
||||||
|
if choix == "Q":
|
||||||
|
print("Au revoir !")
|
||||||
|
break
|
||||||
|
elif choix not in ["C", "D"]:
|
||||||
|
print("Choix invalide, réessayez.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
message = input("Entrez le message : ")
|
||||||
|
clef = input("Entrez la clé (4 à 16 caractères) : ")
|
||||||
|
if not (4 <= len(clef) <= 16):
|
||||||
|
print("La clé doit contenir entre 4 et 16 caractères.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
if choix == "C":
|
||||||
|
resultat = chiffrer(message, clef, matrice)
|
||||||
|
print("\nMessage chiffré :", resultat, "\n")
|
||||||
|
else:
|
||||||
|
resultat = dechiffrer(message, clef, matrice)
|
||||||
|
print("\nMessage déchiffré :", resultat, "\n")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user