Crypteur carre de polybe

4/5 (2 avis)

Vue 12 897 fois - Téléchargée 634 fois

Description

Voila le programme que j'ai codé il y'a peu,

C'est le tout premier code que je propose ici, donc toute remarque est la bienvenue

Il y'a surement quelques lignes qui pourraient être réduites.

Le niveau est, je pense débutant car je commence seulement a programmer depuis peu.

Ce code permets à l'utilisateur de:

- Crypter une phrase à l'aide de la méthode du carré de Polybe ( Carré de Polybe sans le caractère "W" )
- Décrypter une phrase cryptée par le carré de Polybe
- Mini explication sur le carré de Polybe

Il reste encore quelques petites parties à blinder et a modifier, j'en suis conscient

Source / Exemple :


# Programme codé par Dipx pour Pythonfrance
# V1.0

def preparationcryptage(PHRASE):
    "Fonction qui permet de blinder la phrase que l'utilisateur veux crypter"
    LISTE1=["âà","éèêë","îï","ô","ûü","ç"]
    LISTE2=["A","E","I","O","U","C"]
    i=0
    # Remplacement des caractères accentués éventuels
    for mot in LISTE1:
       REPLACE=LISTE2[i]
       for lettre in mot:
           PHRASE=PHRASE.replace(lettre,REPLACE)
       i+=1      
    for lettre in "',-;:!?.":  # Suppression de la ponctuation
        PHRASE=PHRASE.replace(lettre,"")
    PHRASE=PHRASE.upper()    # Passage en majuscules
    return PHRASE

############################################           Menu        ########################################################

print ("Bienvenue dans le programme de cryptage (Méthode de cryptage: Carré de polybe)")
print ("Carré de polybe utilisé: Carré de 5*5, lettre retirée: 'W'\n")

MENU=True
while MENU==True:

    print ("                               Que voulez vous faire ?")
    print ("\nPour crypter une phrase, veuillez taper 1")
    print ("Pour décrypter une phrase, veuillez taper 2")
    print ("Pour avoir des explications sur le cryptage du carré de Polyde, tapez 3")
    choix_util=input("Pour quitter le programme, veuillez taper exit\n=> ")
 

############################################         Cryptage          ###################################################

    if choix_util=='1':
        LISTE_H,LISTE_V=[],[]
        for j in range (4):
            for i in range(5):               
                LISTE_H.append(chr(65+5*j+i))
            LISTE_V.append(LISTE_H)
            LISTE_H=[]
        LISTE_H=[]
        LISTE_H.append(chr(85))
        LISTE_H.append(chr(86))
        LISTE_H.append(chr(88))
        LISTE_H.append(chr(89))
        LISTE_H.append(chr(90))
        LISTE_V.append(LISTE_H)

        A_CRYPTER=input("Entrez le texte à crypter :\n=> ")
        A_CRYPTER=preparationcryptage(A_CRYPTER)
        A_CRYPTER=A_CRYPTER.replace(" ","")

        print ("Votre texte crypté est:")
        for i in range(len(A_CRYPTER)):
            POS=ord(A_CRYPTER[i])-65
            VERTI=str(int((POS/5)+1))
            HORI=str((POS%5)+1)
            FIN=VERTI+HORI
            print (FIN,end=' ')

        print ("\nSi vous voulez revenir au menu de sélection, tapez sur la touche enter")
        CHOIX_MENU=input("Si vous voulez quitter le programme, tapez exit/n =>")
        if CHOIX_MENU=="exit":
            MENU=False

####################################         Decryptage          #############################################################

    elif choix_util=='2':
        LISTE_H,LISTE_V=[],[]
        for j in range (4):
            for i in range(5):               
                LISTE_H.append(chr(65+5*j+i))
            LISTE_V.append(LISTE_H)
            LISTE_H=[]
        LISTE_H=[]
        LISTE_H.append(chr(85))
        LISTE_H.append(chr(86))
        LISTE_H.append(chr(88))
        LISTE_H.append(chr(89))
        LISTE_H.append(chr(90))
        LISTE_V.append(LISTE_H)
           

        A_DECRYPT=input("Entrez le message à décrypter :\n=> ")
        A_DECRYPT=A_DECRYPT.replace(" ","")
        LONG=len(A_DECRYPT)

        print ("\nMessage décrypté :")

        for h in range(0,LONG,2):  #           
            POS=int(A_DECRYPT[h])-1
            POS2=int(A_DECRYPT[h+1])-1
            CARAC=LISTE_V[POS][POS2]
            print (CARAC,end='')

        print ("\nSi vous voulez revenir au menu de sélection, tapez sur la touche enter")
        CHOIX_MENU=input("Si vous voulez quitter le programme, tapez exit\n=> ")
        if CHOIX_MENU=="exit":
            MENU=False

#############################      Explications sur le carré de Polyde       ##################################################

    elif choix_util=='3':
        LISTE_H,LISTE_V=[],[]
        for j in range (4):
            for i in range(5):               
                LISTE_H.append(chr(65+5*j+i))
            LISTE_V.append(LISTE_H)
            LISTE_H=[]
        LISTE_H=[]
        LISTE_H.append(chr(85))
        LISTE_H.append(chr(86))
        LISTE_H.append(chr(88))
        LISTE_H.append(chr(89))
        LISTE_H.append(chr(90))
        LISTE_V.append(LISTE_H)

        print ("Voici un schéma du carré de Polybe :\n" )
        for j in range (5):
            for i in range(5):
                print (LISTE_V[j][i],end='')
            print ()
        print ("\nChaque lettre à une coordonnée qui lui est propre,")
        print ("La coordonnée se lit comme ceci: (Numéro de la ligne, Numéro de la colonne),")
        print ("Ainsi la coordonée de A est (1,1) et se crypte: 11")
        print ("Pour en savoir plus : <http://www.apprendre-en-ligne.net/crypto/subst/polybe.html>")
        print ("\nSi vous voulez revenir au menu de sélection, tapez sur la touche enter")
        CHOIX_MENU=input("Si vous voulez quitter le programme, tapez exit\n=> ")
        if CHOIX_MENU=="exit":
            MENU=False

############################## Blindage menu + commande exit ##############################################

    elif choix_util=='exit':
        MENU=False
    else :
        print ("\nVeuillez entrer une commande valide")
        print ("Retour au menu\n")

print ("Merci d'avoir utilisé le programme de cryptage/décryptage du carré de Polyde !")

Codes Sources

A voir également

Ajouter un commentaire Commentaires
salut algorithme de cryptage de polybe en java
PlugnPlay666
Messages postés
30
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
17 septembre 2010

6 juin 2010 à 15:40
Bonjour,

Je pense que tu devrais laisser la possibilité à ton utilisateur de sélectionner un fichier texte à encrypter/décrypter, ça serait plus simple. Car si il a un gros texte ça risque de prendre beaucoup de temps de tout copier . . .
Tu pourrais également lui proposer d'enregistrer le texte après encryptage/décryptage pour qu'il n'ai pas à tout recommencer.

J'ai vu que tu faisais un print() pour pouvoir sauter une ligne, je te recommande de mettre un /n ou /r à la place de ton print(), car c'est vraiment moche et le Python est un langage créé pour être beau et agréable à lire.
(erreur visibles aux lignes 25 ; 31 ; 71 ; 111 ; 136 ; 141 ; 145 ; 157 ; 160 )

Dans ta description du carré de poblybe, tu pourrais rajouter à la fin print('Pour en savoir plus : <http://www.apprendre-en-ligne.net/crypto/subst/polybe.html>') pour que les utilisateurs puissent en savoir plus à propos de Polybe et de son cryptage (que je ne connais pas du tout d'ailleurs ^^" )

Sinon, je pense que ton code sera utile aux débutants en Python qui cherche à remplacer un caractère par un autre dans n'importe quel but.

Cordialement Plug'n'Play 666.

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.