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