Python | Cryptographie
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Python | Cryptographie



  1. #1
    DavianThule95

    Question Python | Cryptographie


    ------

    Bonjour,

    Depuis hier, je m'intéresse à la cryptographie et j'ai donc essayé de coder l'algorithme de César.
    Mais je ne comprends rien, le programme me renvoie n'importe quoi, mais n'affiche pas d'erreur.

    Pourriez-vous m'aider ?

    Merci d'avance.
    DavianThule

    -----
    Images attachées Images attachées  
    Je dis ça je dis rien mais j'le dis quand même.

  2. #2
    imoca

    Re : Python | Cryptographie

    Code:
    Caracteres = """abcdefghijklnopqrstuvwxyz 0123456789,;:!?."""
    
    def Crypt(message, key):
        global Caracteres
        l = len(Caracteres)
        cryptedmessage = ""
        message = message.lower()
        message = str(message)
        for car in message:
            if(car in Caracteres):
                num = Caracteres.find(car)
                num = (num + key)%l
                cryptedmessage += Caracteres[num]
            else:
                cryptedmessage += car
        return cryptedmessage
    m = Crypt("En cryptographie, le chiffrement par décalage, aussi connu comme le chiffre de César ou le code de César (voir les différents noms), est une méthode de chiffrement très simple utilisée par Jules César dans ses correspondances secrètes (ce qui explique le nom « chiffre de César »).",5)
    print(m)
    mm = Crypt(m,-5)
    print(mm)

  3. #3
    DavianThule95

    Re : Python | Cryptographie

    Merci pour la réponse.

    J'ai une autre question : J'ai réussi à encrypter, et j'essaye de décrypter.
    J'ai coder comme message 'abaissement' avec un décalage de 1 vers la gauche (les caractères : """ABCDEFGHIJKLMNOPQRSTUVWXYZa bcdefghijklmnopqrstuvwxyz 123456789,;:.!?"&/\+-*'""")
    Donc cela donne : ===>|ZaZhrrdldms|<=== (sans compter les barres)
    mais quand il décrypte, il ne trouve pas le mot dans le dictionnaire, alors qu'il y est.
    Images attachées Images attachées  
    Je dis ça je dis rien mais j'le dis quand même.

  4. #4
    DavianThule95

    Re : Python | Cryptographie

    En fait je vais reformuler une question plus simple équivalente :

    Pourquoi me dit-il que le mot n'est pas dans le dictionnaire ??? (ça fait pareil avec tout les mots).
    Images attachées Images attachées  
    Je dis ça je dis rien mais j'le dis quand même.

  5. A voir en vidéo sur Futura
  6. #5
    Chanur

    Re : Python | Cryptographie

    Bonjour,
    Si tu donnais ton code source au lieu de copies d'écran illisibles, on pourrait peut-être commencer à réfléchir à la question ...
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  7. #6
    JPL
    Responsable des forums

    Re : Python | Cryptographie

    Utilise les balises [code]....[/code], c’est à dire # dans l’éditeur en mode avancé.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  8. #7
    DavianThule95

    Re : Python | Cryptographie

    Voilà le code :

    Code:
    def decrypt(cryptedMessage):
        global CaracteresCesar
        global VerboseCesar
        global Dico_prob
        
    #    decryptedMessageList = ""
        if (VerboseCesar > 0):
            print "message crypte = " + cryptedMessage
            
        for key in range(len(CaracteresCesar)):
        #On teste toute les cles possibles
            decryptedMessageKey = ""
            for car in cryptedMessage:
            #Pour chaque caractere du message :
                if (car in CaracteresCesar):
                #Si le caractere est present dans la liste des caracteres disponibles :
                    if (VerboseCesar > 0):
                        print "\n[%s] in [%s]" % (car, CaracteresCesar)
                    num = CaracteresCesar.find(car) - key
                    if (num >= len(CaracteresCesar)):
                        num -= len(CaracteresCesar)
                    decryptedMessageKey += CaracteresCesar[num]
                else:
                #Si le caractere n'est pas present dans la liste des caracteres disponibles : 
                    if (VerboseCesar > 0):
                        print "\n[%s] not in [%s]" % (car, CaracteresCesar)
                    decryptedMessageKey += car
            
            
            decryptedMessageKey = re.findall("[a-z_]+", decryptedMessageKey.lower())
            print decryptedMessageKey
            Dico = open("C:\Users\Navigateur_2\Desktop\Liste.txt", "r")
            prob = 0
            Dico_prob = {}
            for mot in Dico:
                mot = mot.decode('utf-8').strip().lower()
                if (mot in decryptedMessageKey):
                    prob += 1
                else:
                    continue
            Dico.close()
            Dico_prob[key] = prob
            
    
        max_prob = max(Dico_prob, key=Dico_prob.get)
        
        return max_prob
    
    
    if __name__ == "__main__":
        print "\nCe programme permet d'encoder ou de decoder des messages par l'algorithme de Cesar."
    #    cryptOrDecrypt = raw_input("\nSouhaitez-vous crypter ou decrypter un message (crypter/decrypter) : ")
        cryptOrDecrypt = "decrypter"
        if (cryptOrDecrypt.lower() == "crypter"):
            message = raw_input("\n----Entrez votre message : ")
            key = int(input("Quelle cle souhaitez-vous utiliser : "))
            cryptedMessage = crypt(message, key)
            print "\n----Message une fois crypte : \n%s" % cryptedMessage
            
        if (cryptOrDecrypt.lower() == "decrypter"):
            keyKnowledge = "non"
            
            if (keyKnowledge.lower() == "non"):
                message = "cpokpvs"
                key = decrypt(message)
    
    
            print "\n----La cle de chiffrement set : \n%u" % key
    Et quand je lance le programme, il me retourne "None".
    Ca veut donc dire qu'aucune des clés testées ne déchiffre le message, où qu'aucun des messages déchiffrés ne contient de mots similaires à ceux du dictionnaire.
    (Je ne peux pas envoyé la liste, il m'affriche échec de l'envoie, malgré plusieurs essais, je réessaierai plus tard)
    Il s'agit d'un dictionnaire français, tout les mots sur une ligne, il n'y a pas de guillemet ou autre symbole non-alphanumérique, j'ai enlevé les accents.
    Dernière modification par DavianThule95 ; 19/06/2017 à 05h46.
    Je dis ça je dis rien mais j'le dis quand même.

Discussions similaires

  1. [Python] subprocess, lancer un autre programme avec python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 30/11/2016, 18h56
  2. en python le multi tache n'est pas possible alors pourquoi les threads existent sur python?
    Par docEmmettBrown dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 10/06/2015, 15h47
  3. cryptographie
    Par invite1ff1de77 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 19/11/2007, 20h33
  4. cryptographie
    Par invitef4609854 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 02/04/2007, 17h21
  5. TPE sur la cryptographie
    Par waka dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 12/04/2004, 11h05