Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème algorithme de Playfair [ISN]

Sujet résolu
    18 mai 2015 à 10:01:47

    Bonjour je suis un étudiant de Terminale S spé ISN, voila j'ai un petit soucis avec mon programme de cryptage Playfair, il ne fonctionne pas, je ne vois pas mon erreur et j'aimerai avoir de l'aide merci.

    print ("Chiffrement de Playfair")
    # Mot clé
    cle = input("Insérer clé: ")
    listecle=list(cle)
    listecle2=[]
     
    # Alphabet et matrice
    for c in listecle :
        if c == 'j' :
            c = 'i'
        if c not in listecle2 :
            listecle2.append(c)
     
    listecle2="".join(listecle2)
     
     
    alphabet = "abcdefghiklmnopqrstuvwxyz"
    matrice = listecle2 + alphabet
    print (matrice)
     
    tampon = set([])
    resultat = []
    for c in matrice:
        if c not in tampon:
            resultat.append(c)
        tampon.add(c)
     
    matrice = resultat
     
    #creation du tableau:
         
    tableau = []
         
    place = 0
    for x in range(5):
            tableau2 = []
            for y in range(5):
                tableau2.append(resultat[place])
                place = place+1
            tableau.append(tableau2)
    print (tableau)
     
    # La phrase
    message = input("Inserer phrase: ")
    listemessage=list(message)
    listemessage2=[]
     
    for c in listemessage :
        if c == 'j':
            c = 'i'
            listemessage2.append(c)
        else:
            listemessage2.append(c)
     
    listemessage2="".join(listemessage2)
    print (listemessage2)
     
    if len(listemessage2) % 2 != 0 :
        listemessage2=listemessage2+ "x"
     
    # x entre des doubles lettres
    def doubles(a):
       lettres = list(a)
       for i in range(len(a)-2,-1,-1):
         if lettres[i] == lettres[i+1]:
           lettres[i:i+2] = [lettres[i],'x',lettres[i+1]]
       return ''.join(lettres)
     
    listemessage2 = doubles(listemessage2)
     
     
             
    # Lettres dans index
    matrice = list(matrice)
    listemessage2 = list(listemessage2)
             
    crypt = [matrice.index('c') for c in listemessage2]
    print (crypt)
     
     
    coordonneex = []
    coordonneex = list(coordonneex)
    coordonneey = []
    coordonneey= list(coordonneey)
     
    for c in crypt :
        ex1=ey1=0
        if 0<=c<5 :
            ex1 = c
            ey1 = 0
        if 5<=c<10 :
            ex1 = c-5
            ey1 = 1
        if 10<=c<15 :
            ex1 = c-10
            ey1 = 2
        if 15<=c<20 :
            ex1 = c-15
            ey1 = 3
        if 20<=c<25 :
            ex1 = c-20
            ey1 = 4
        coordonneex.append(ex1)
        coordonneey.append(ey1)
     
    print (coordonneex)
    print (coordonneey)
     
     
    tabledecoordonneex = []
    tabledecoordonneey = []
    place2 = 0
    for x in range (len(coordonneex)//2):
            coordx = []
            coordy = []
            for y in range(2):
                coordx.append(coordonneex[place2])
                coordy.append(coordonneey[place2])
                place2 = place2+1
            tabledecoordonneex.append(coordx)
            tabledecoordonneey.append(coordy)
    print (tabledecoordonneex)
    print (tabledecoordonneey)
     
    for x,y in zip(tabledecoordonneex,tabledecoordonneey) :
        if y[0]== y[1] :
            if abs(x[0]-x[1])<2 :
                x[0]=x[0]+2
                x[1]=x[1]+2
                if x[0]>4 :
                    x[0]=x[0]-4
                if x[1]>4:
                    x[1]=x[1]-4
            if abs(x[0]-x[1])>1 :
                x[0]=x[0]+1
                x[1]=x[1]+1
                if x[0]>4 :
                    x[0]=x[0]-4
                if x[1]>4:
                    x[1]=x[1]-4
        if x[0]== x[1] :
            if abs(y[0]-y[1])<2 :
                y[0]=y[0]+2
                y[1]=y[1]+2
                if y[0]>4 :
                    y[0]=x[0]-4
                if y[1]>4:
                    y[1]=x[1]-4
            if abs(y[0]-y[1])>1 :
                y[0]=y[0]+1
                y[1]=y[1]+1
                if y[0]>4 :
                    y[0]=x[0]-4
                if y[1]>4:
                    y[1]=x[1]-4
        if x[0]!= x[1] and y[0]!= y[1]:
            x.reverse()
     
    print (tabledecoordonneex)
     
    listefinalx=[]
    listefinaly=[]
     
    for list in tabledecoordonneex :
        listefinalx.extend(list)
    print (listefinalx)
     
    for list in tabledecoordonneey :
        listefinaly.extend(list)
    print (listefinaly)
     
    motcrypte=[]
    for y,x in zip(listefinaly,listefinalx) :
            motcrypte.append(tableau[y][x])
      
             
    print (motcrypte)
     
    motcrypte="".join(motcrypte)
    print (motcrypte)
    



    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2015 à 10:49:04

      Salut,

      Comment ca il ne marche pas ? Il ne fait pas ce que tu veux ? Si oui, tu aimerai qu'il fasse quoi et où est le problème ? Si c'est une erreur que tu as, quelle erreur c'est ? Etoffe un peu ton problème ;)

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2015 à 18:46:46

        Salut,

        Merci pour ta réponse, je vais mieux m'expliquer,

        Tout d'abord mon programme est sensé etre un programme pour crypter un message avec la facon PlayFair, mon probleme est quand je tape la clé + le message a coder, il me le crypte mal est me donne une seul fois la même lettre équivalent au nombre de lettres dans le message donc il transcrit mal et je ne vois pas ou est mon erreur de le code que j'ai mis au dessus :/

        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2015 à 11:28:21

          Ce n'est pas ça par hasard ?

          crypt = [matrice.index('c') for c in listemessage2]
          
          # a remplacer par ca :
          
          crypt = [matrice.index(c) for c in listemessage2]



          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2015 à 16:40:22

            Merci Jevanni tu a raison mon erreur était bien la :p

            Je te remercie vraiment car je suis plus qu'a une semaine de l'oral et je ne voyais vraiment pas mon erreur !! Tu me sauve littéralement la vie ;)

            • Partager sur Facebook
            • Partager sur Twitter
              20 mai 2015 à 16:52:39

              De rien, après si tu veux rendre ton programme un peu plus joli (car là il est juste illisible), tu pourrais notamment faire deux ou trois fonctions : Une fonction qui fait ton tableau avec ta clé, une fonction, qui code ton message avec la table de ta précédente fonction, une fonction qui décode un message avec son tableau. Ça rendra déjà ton code un peu plus lisible et ça rendra ton correcteur peut être plus sympa. Aussi il semble que ton code ne gère pas les majuscules, donc pense à mettre ta clé et ton message en minuscule avant de lancer le traitement.

              Bonne chance !

              • Partager sur Facebook
              • Partager sur Twitter

              Problème algorithme de Playfair [ISN]

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown