IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème d'encodage de clé? [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut Problème d'encodage de clé?
    Bonjour tout le monde,
    J'ai créé un micro-programme qui qui génère une clé 256 bit avec os.urandom(32) et je stocke dans une variable key. J'enregistre la valeur de la clé dans un fichier automatiquement généré que j'ai appelé : tetKey.txt.
    Un fois cela, je lance une boucle qui va me demander la valeur de la clé, va tester cette valeur entrée avec la véritable clé et va déverrouiller le programme si celle-xi est la bonne.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    import os
     
    key = os.urandom(32)
    with open("tetKey.txt", "wb") as tK :
    	tK.write(key)
    key = None
    goodKey = False
     
    while goodKey == False :
    	enKey = input("Key >>")
    	with open("tetKey.txt", "rb") as tK :
    		key = tK.read()
    		print(key)
    		print(enKey)
    		if enKey == key :
    			print("Good job this is the good key" + enKey)
    			goodKey = True
    		else :
    			print("Try again")
    print("END")
    Ce que je ne comprends pas, c'est quand je teste le programme et que pour faire en sorte que le programme se déverrouille je récupère la clé notée dans le fichier, et que je la colle, ça ne fonctionne pas. J'aimerais donc comprendre pourquoi Merci d'avance pour vos réponses

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Salut,

    Citation Envoyé par wildshadow956 Voir le message
    ça ne fonctionne pas. J'aimerais donc comprendre pourquoi
    La commande magique "print" vous indiquerait que votre clef est une suite de "bytes" alors que ce que retourne "input" est "str"ing. Vous comparez des objets de type différent: ils seront toujours inégaux.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    La commande magique "print" vous indiquerait que votre clef est une suite de "bytes" alors que ce que retourne "input" est "str"ing. Vous comparez des objets de type différent: ils seront toujours inégaux.

    - W
    Mais même quand je transforme la string en bytes, elles ne s'encode pas comme elle l'aurait du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    key = tK.read()
    		print(key)
    		enKey = bytes(enKey, encoding="utf-8")
    		print(enKey)
    		if enKey == key :

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Citation Envoyé par wildshadow956 Voir le message
    Mais même quand je transforme la string en bytes, elles ne s'encode pas comme elle l'aurait du :
    Vous transformez une chaîne de caractères Unicode en utf-8 puis la transformez en bytes.
    Comme elle contient des caractères > 128, cette transformation va remplacer 1 caractères par 2 ou 3 bytes.
    Donc c'est n'importe quoi et en général, çà ne fonctionne pas.

    Il faudrait la transformer d'abord en une liste d'entiers (avec la fonction "ord"), puis en faire des bytes après avoir validé ce que récupère "input".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Par défaut
    Donc je résume : Pour obtenir une bonne comparaison,
    - dans une boucle, je transforme tout les caractères en entiers grâce à ord()
    - Je les transforme en byte et je compare

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Citation Envoyé par wildshadow956 Voir le message
    Donc je résume : Pour obtenir une bonne comparaison,
    - dans une boucle, je transforme tout les caractères en entiers grâce à ord()
    - Je les transforme en byte et je compare
    Après avoir validé ce que retourne "input".
    Regardez un peu le len() de ce qu'à retourné "input"... vous devriez être surpris.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CSV] Problème d'encodage
    Par simoryl dans le forum Langage
    Réponses: 13
    Dernier message: 18/04/2012, 15h20
  2. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  3. Problème d'encodage en Unicode
    Par Skreo dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/12/2005, 10h43
  4. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  5. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo