From 949065b4481849a5ffc83a622516faf1111ad200 Mon Sep 17 00:00:00 2001 From: johanleroy Date: Tue, 9 Sep 2025 11:27:31 +0200 Subject: [PATCH] TP04 --- TP04.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 TP04.py diff --git a/TP04.py b/TP04.py new file mode 100644 index 0000000..0207207 --- /dev/null +++ b/TP04.py @@ -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()