Encodage, decodage de Vigenere

Chizqiyah -  
 khrug -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Quel souci exactement ?
0
Chizqiyah
 
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
khrug
 
Bonsoir.

le retour de
fichier1.read()
et
fichier1.split(",")
ne sont pas affectés à des variables dans ton code.

Cela devrait être quelque-chose comme
txt = fichier1.read()
et
words = txt.split(",")
, donc c'est sur la liste words que tu devras opérer.
0