Encodage, decodage de Vigenere

Fermé
Chizqiyah - Modifié le 16 oct. 2019 à 22:31
 khrug - 17 oct. 2019 à 20:15
Bonjour, j'essaies d'encoder un fichier txt et de créer un fichier différent qui affiche ce que j'ai coder en utilisant le principe de Vigenere. J'ai un problème à partir de def encodage_fichier():
Voici mon code

# -*- coding: utf-8 -*-

ALPHABET = {
    "a": 0,
    "b": 1,
    "c": 2,
    "d": 3,
    "e": 4,
    "f": 5,
    "g": 6,
    "h": 7,
    "i": 8,
    "j": 9,
    "k": 10,
    "l": 11,
    "m": 12,
    "n": 13,
    "o": 14,
    "p": 15,
    "q": 16,
    "r": 17,
    "s": 18,
    "t": 19,
    "u": 20,
    "v": 21,
    "w": 22,
    "x": 23,
    "y": 24,
    "z": 25,
    " ": 26,
    "'": 27
}
ALPHABET_INVERSE = {v: k for k, v in ALPHABET.items()}
LONGUEUR_ALPHABET = len(ALPHABET)

def encodage(phrase, cle):
    encodage = []
    for i in range(len(phrase)):
            x = (ALPHABET[phrase[i]] + ALPHABET[cle[i % len(cle)]]) % LONGUEUR_ALPHABET
            encodage.append(ALPHABET_INVERSE[x])
    return ("" . join(encodage))

def decodage(phrase_encodee, cle):
    decodage = []
    for i in range(len(phrase_encodee)):
            x = (ALPHABET[phrase_encodee[i]] - ALPHABET[cle[i % len(cle)]]) % LONGUEUR_ALPHABET
            decodage.append(ALPHABET_INVERSE[x])
    return ("" . join(decodage))


def encodage_usager():
    veut_continuer = True

    while veut_continuer:
        phrase = input("Quelle phrase souhaitez-vous encoder ?\n")
        cle = input("Quelle clé souhaitez-vous utiliser ?\n")

        phrase_encodee = encodage(phrase, cle)
        print("La phrase encodée est : \n{}".format(phrase_encodee))

        touche_entree = input("Si vous désirez quitter, entrez 0, sinon entrez n'importe quelle autre touche.\n")

        veut_continuer = touche_entree != '0'


def decodage_usager():
    veut_continuer = True

    while veut_continuer:
        phrase = input("Quelle phrase souhaitez-vous décoder ?\n")
        cle = input("Quelle clé souhaitez-vous utiliser ?\n")

        phrase_decodee = decodage(phrase, cle)
        print("La phrase décodée est : \n{}".format(phrase_decodee))

        touche_entree = input("Si vous désirez quitter, entrez 0, sinon entrez n'importe quelle autre touche.\n")

        veut_continuer = touche_entree != '0'


def encodage_fichier():
    #Ouverture des fichiers à lire et à écrire
        # Ouverture du fichier1 et sa lecture
    fichier1 = open("encodage_a_faire.txt", "r")
    fichier1.read()
        # Séparer les mots du fichier1 en utilisant comme référence la virgule afin d'avoir les phrases
        # à encoder et leurs clés dans des listes (phrase, cle).
    fichier1.split(",")
    
        # Ouverture du fichier2 et son écriture
    fichier2 = open("encodage_fini.txt", "w")
    
    fichier2.writelines(encodage(fichier1[0], fichier1[1]))
    
    
    # Fermeture des fichiers
    fichier1.close()
    fichier2.close()    
   # pass


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
17 oct. 2019 à 07:23
Bonjour
Quel souci exactement ?
0
Lorsque j'ai un fichier.txt et que je veux l'encoder au niveau de def encodage_fichier():, cela ne fonctionne pas.
Mon programme devrait créer un fichierencoder.txt où l'encodage sera fait.
Tu peux enregistrer ces phrases suivantes dans un fichier bloc note et essayer de l'encoder en respectant les sauts de lignes et que pour chaque ligne, tu as la (phrase,cle).

bonjour,allo
quelle bonne poutine,valentine
j'aime la poutine,ashton
petit,immense
0