Chiffre de vigenère

Soyez le premier à donner votre avis sur cette source.

Vue 13 861 fois - Téléchargée 896 fois

Description

Voilà, c'est ma première source... Soyez donc un peu indulgents SVP :)
Ce programme, avec une interface graphique TKinter, permet de chiffrer et de déchiffrer un texte grâce au chiffre de Vigénère. Remarque : ceci est le VRAI algorithme, ce n'est pas celui qui insère des caractères spéciaux incompréhensibles... (cf. recherche "Vigenere") Algorithme : "Ars cryptographica" sur Google.

Ch'uis débutant, n'hésitez pas à faire des remarques :)

Source / Exemple :


#! /usr/bin/python

# -*- coding: cp1252 -*-

from Tkinter import *

import re

import string

def crypt():

    i=0

    str_crypted=''

    txt3.delete(1.0,END)

    

    str_tocrypt= txt1.get(1.0,END)

    str_tocrypt=string.upper(str_tocrypt)

    str_tocrypt=re.sub('[^A-Z]','',str_tocrypt)

    txt1.delete(1.0,END)

    txt1.insert(INSERT,str_tocrypt)

    cle=txt2.get( 1.0,END)

    cle=string.upper(cle)

    cle=re.sub('[^A-Z]','',cle)

    txt2.delete(1.0,END)

    txt2.insert(INSERT,cle)

    while i<=len(str_tocrypt)-1:

        if i<=len(cle)-1:

            let_interm = cle[i]

            decalage=ord(let_interm)-65

            if ord(str_tocrypt[i])+decalage>90:

                let_new=chr(ord(str_tocrypt[i])+decalage-26)

            else:

                let_new=chr(ord(str_tocrypt[i])+decalage)

            str_crypted+=let_new

        else:

            let_interm=cle[i-(i/len(cle))*len(cle)]

            decalage=ord(let_interm)-65

            if ord(str_tocrypt[i])+decalage>90:

                let_new=chr(ord(str_tocrypt[i])+decalage-26)

            else:

                let_new=chr(ord(str_tocrypt[i])+decalage)

            str_crypted+=let_new

        i=i+1

    txt3.insert (INSERT,str_crypted)

def uncrypt():

    i=0

    str_crypted=''

    txt1.delete(1.0,END)

    

    str_tocrypt=txt3.get(1.0,END)

    str_tocrypt=string.upper(str_tocrypt)

    str_tocrypt= re.sub('[^A-Z]','',str_tocrypt)

    txt3.delete(1.0,END)

    txt3.insert(INSERT,str_tocrypt)

    cle=txt2.get(1.0,END)

    cle=string.upper(cle)

    cle=re.sub('[^A-Z]','',cle)

    txt2.delete(1.0,END)

    txt2.insert(INSERT,cle)

    while i<=len(str_tocrypt)-1:

        if i<=len(cle)-1:

            let_interm = cle[i]

            decalage=ord(let_interm)-65

            if ord(str_tocrypt[i])-decalage<65:

                let_new=chr(ord(str_tocrypt[i])-decalage+26)

            else:

                let_new=chr(ord(str_tocrypt[i])-decalage)

            str_crypted+=let_new

        else:

            let_interm=cle[i-(i/len(cle))*len(cle)]

            decalage=ord(let_interm)-65

            if ord(str_tocrypt[i])-decalage<65:

                let_new=chr(ord(str_tocrypt[i])-decalage+26)

            else:

                let_new=chr(ord(str_tocrypt[i])-decalage)

            str_crypted+=let_new

        i=i+1

    txt1.insert(INSERT,str_crypted)

fen=Tk()

fen.title('Cryptage/Décryptage VIGENERE By ElPutoamo')

Label(fen,text='Texte à CRYPTER/DECRYPTER',fg='red').grid(row=0)

txt1=Text(fen,height=10,width=70)

txt1.grid(row=1)

Label(fen,text='Clé de cryptage',fg='red').grid(row=2)

bou1=Button(fen,text='Décrypter',command=uncrypt)

bou1.grid(row=2,sticky=E)

txt2=Text(fen,height=3,width=70)

txt2.grid(row=3)

bou2=Button(fen,text='Crypter',command=crypt)

bou2.grid(row=4,sticky=W)

Label(fen,text='Texte CRYPTE/A DECRYPTER',fg='red').grid(row=4)

txt3=Text(fen,height=10,width=70)

txt3.grid(row=5)

fen.mainloop()

Conclusion :


1)Entrer le texte à crypter/décrypter.
2)Entrer la clé de cryptage.
3)Cliquer sur "Crypter/Décrypter"

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

benitoelputoamo
Messages postés
1
Date d'inscription
jeudi 3 juin 2004
Statut
Membre
Dernière intervention
5 août 2007

Merci pour vos commentaires, très constructifs.

@Papy Octet 1. J'ajouterai des commentaires dès que possible.
2. Les lignes blanches se sont ajoutées toutes seules, j'ai juste copié-collé :S

@Taz_Iup : Je vais essayer de modifier mon code et le reposterai dès que possible. Quant à wxPython, je suis en train de me documenter.

Merci pour vos commentaires.
B.
taz_iup
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014

Evite d'utiliser des variables globales. fait des fonctions qui utilise des parametres a la place

par exemple

def crypt( txt ):
result = ""
...
return result

ainsi tu pourras plus facilement reutiliser tes fonctions.
dans ton cas il faut obligatoirement que tu est des objets tkinter s'appelant txt3,etc

Cela te permet également de séparer le "core" de ton interface. Le code est également plus lisble et on se demande pas on on va chercher ses variables tout droit sorties de nulle part.

Ensuite simplifies toi la vie :
pas besoin de faire string.upper(str_tocrypt) fais simplement str_tocrypt.upper() ( si str_tocrypt est un objet string python bien sûr )

Les fonctions relative au clic et autres événements de l'interface sont souvent appelé onQuelquechose, par exemple onBou2Clic pour le clic sur ton objet bou2

Tu peux aussi préfixer tes objets selon leur types et leur donner des noms significatifs:
par exemple buCryptage a la place de bou2 pour le bouton qui va declencher le cyptage. On sait que c'est un bouton avec le prefixe bu et le nom indique qu'il va crypter ^^

Des prefixes standards existent pour les types simples comme les entiers les chaines, etc.. mais je ne connais pas de standard pour les objets graphiques :p

Ensuite juste avis personnel, a l'occasion essai wxpython, c'est un peu plus complexe que tkinter mais tellement plus beau et plus complet ^^

Voila
Papy Octet
Messages postés
17
Date d'inscription
dimanche 18 juin 2006
Statut
Membre
Dernière intervention
14 juin 2014

Salut ben...,

Pour un début, pas mal.

Mais quelques petites remarques :
1. La plus importante : tu devrais documenter ton code (placer des explications sur ce qu'il fait), cela te permettra de mieux t'y retrouver quand tu tenteras de modifier ton code. Et en plus, cela permettra à d'autres utilisateurs de mieux comprendre son fonctionnement. Et puis, ça aide pour la recherche de défaut d'exécution du code.
2. Pourquoi tant de lignes vides entre tes lignes de code ? Place une ligne vide entre deux boucles, deux définitions de fonctions, etc. OK, mais point trop n'en faut.

Bonne continuation. Je suis certain que tu trouveras du plaisir à programmer.
A+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.