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 entier?


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut Problème d'encodage entier?
    Bonjour,

    Je crypte une valeur que je décrypte par la suite, or le résultat de la valeur décrypté me provoque une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    invalid literal for int() with base 10: '3109016951\x06\x06\x06\x06\x06\x06'
    J'avoue ne pas y comprendre grand chose en unicode, et j'ai essayé de le décoder sans succès.Comment enlever l'unicode ou tout simplement le retransformer en entier.

    Avez-vous une idée ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,
    Le message d'erreur est assez explicite: "invalid literal for int() with base 10" signifie que la chaine de caractere proposee a int contient autre chose que des chiffres dans [0-9].
    Les '\x06\x06\x06\x06\x06\x06' sont des "bytes" dont la valeur est 6.
    Les chiffres dans [0-9] sont des bytes representes en hexa par:
    • hex(chr('0')) => x30 et,
    • hex(chr('9')) => x39.

    ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> int(b'\x39\x38')
    98
    >>> int('\x39\x38')
    98
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    Merci pour la réponse,

    Mon problème ici est que je ne comprend pas à quoi peuvent faire référence ces bytes en plus étant donné que mon entier crypté puis décrypté est "3109016951" qui est bien présent. J'ai envie de dire, qu'est ce ces caractères foutent là ? y a t'il une solution pour les supprimer proprement ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par polo42 Voir le message
    Mon problème ici est que je ne comprend pas à quoi peuvent faire référence ces bytes en plus étant donné que mon entier crypté puis décrypté est "3109016951" qui est bien présent. J'ai envie de dire, qu'est ce ces caractères foutent là ? y a t'il une solution pour les supprimer proprement ?
    Quelque part, s'ils sont la, c'est le résultat de votre code.
    S'ils n'ont rien a y faire, c'est a priori un "bug".

    nettoyer 3109016951\x06\x06\x06\x06\x06\x06, c'est retirer tout les caractères qui ne sont pas dans [0-9]. Mais il serait plus propre d'eviter de les produire, non?

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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    Bonjour,

    Encore merci pour votre réponse. Je crois avoir trouvé le problème mais je n'ai pas la solution. Pour vous mettre dans le contexte, je développe sous Django et je pense que cette précision n'est pas anodine.

    Je m'explique,

    1) Je crypte les données et les insère dans un formulaire de type POST.
    2) Après soumission du formulaire, les données sont envoyées (encodées en utf-8) par défaut dans les formulaires Django.
    3) Je réceptionne les données et décode l'utf-8.
    4) Je décrypte les données.

    Mais il y a toujours les fameux caractères qui posent problèmes...Je cherche encore.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    Bonjour,

    J'ai fait de multiples tests que voici, ma chaîne crypté est ici "ide" ou postFields['id']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     typo = type(postFields['id'])
          ide = postFields['id']
          typo2= type(str(ide).encode('ascii', 'ignore'))
          typo4= type(ide.encode('ascii', 'ignore'))
          typo3 = type(postFields['id'].decode('unicode_escape'))
          test = uncrypt(str(ide))
          test2 = uncrypt(ide.encode('ascii','ignore'))
     
          idUnique = uncrypt(postFields['id'].decode('unicode_escape'))
    Qui donnent ça

    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
    22
    23
    24
    25
    26
    typo3 = <type 'unicode'>
     
    typo2 = <type 'str'>
     
    idUnique = None
     
    test2 = '2137\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
     
    TypeObjet 	 = '1'
     
    typo4 = <type 'str'>
     
    postFields 	
     
    {u'csrfmiddlewaretoken': u'TgvjYDMR1JoWK17sRCMX73oOohoDPZ5D',
     u'deleteConfirmNon': u'Non',
     u'id': u'ACglWcjIQW1LynTh8ygoX_9n_AlMBC6p1lBLojr1ZlIPTZ5fSlcywbCl2F5aaDqZDnZKj_fNdO5ErMsedyoEJV1s60fGJS-u9A',
     u'n': u'ACglWcgGWEVFkJ7HRIwLo2PelWpmlYsnHRM0uuEsKZpgiQVKSTesO_8ptt5eNIoBzhCk2QzMxtIQA-2HAKKK6fM8VmYV0vtTTiVa3_uV10ThA_uTv8ZVzKMbnsHN2OXPwBXa0pj08wsY',
     u'or': u'1',
     u'typ': u'1'}
     
    typo = <type 'unicode'>
     
    test =	'2137\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
     
    ide=u'ACglWcjIQW1LynTh8ygoX_9n_AlMBC6p1lBLojr1ZlIPTZ5fSlcywbCl2F5aaDqZDnZKj_fNdO5ErMsedyoEJV1s60fGJS-u9A'
    Donc pas de résultat probants,

    Je pourrais m'en sortir facilement avec une expression régulière, mais je trouve ça moche et au final je n'aurait pas plus compris mon erreur

    Avez-vous une idée ?

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par polo42 Voir le message
    Avez-vous une idée ?
    Dans ce que vous voulez bien montrer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test2 = '2137\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
    est produit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uncrypt(ide.encode('ascii','ignore'))
    que vous ne montrez pas.

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

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    Bonjour,

    Dites moi ce que vous voulez voir et je vous le montrerais.

    Le code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typo = type(postFields['id'])
    ide = postFields['id']
    typo2= type(str(ide).encode('ascii', 'ignore'))
    typo4= type(ide.encode('ascii', 'ignore'))
    typo3 = type(postFields['id'].decode('unicode_escape'))
    test = uncrypt(str(ide))
    test2 = uncrypt(ide.encode('ascii','ignore'))
    test5 = ide.encode('ascii','ignore')
    idUnique = uncrypt(postFields['id'].decode('unicode_escape'))
    Le résultat

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    typo3 = 	<type 'unicode'>
     
    typo2 = <type 'str'>
     
    idUnique 	= None
     
    test2 = '3109016951\x06\x06\x06\x06\x06\x06'
     
    test5 = 'ACglWcgbiR0EDP_NGdhas6k9DlOugwxKDMSvjcDCgvBR4gaP8tVoNG1vWimXe4PC3ZldoCBBUOIPMtSGrhD4ZIP6dazB0CxKYQ'
     
    TypeObjet 	= '1'
     
    typo4 = <type 'str'>
     
    postFields 	
     
    {u'csrfmiddlewaretoken': u'TgvjYDMR1JoWK17sRCMX73oOohoDPZ5D',
     u'deleteConfirmNon': u'Non',
     u'id': u'ACglWcgbiR0EDP_NGdhas6k9DlOugwxKDMSvjcDCgvBR4gaP8tVoNG1vWimXe4PC3ZldoCBBUOIPMtSGrhD4ZIP6dazB0CxKYQ',
     u'n': u'ACglWcgJiNDEvQdNOqYYSrP7BVkTssoymoCqkMczv5ea3Q3w02ZnqMFr85n5gjl43q5kt-yw1RY6Vr6bXQca6NBAhe8QoiFZEwX5ERZEO7cee9pvzj-K4e8FI1RrIQt_ydrHTKx_Za-u',
     u'or': u'1',
     u'typ': u'1'}
     
    typo 	= <type 'unicode'>
     
    test 	= '3109016951\x06\x06\x06\x06\x06\x06'
     
    ide=u'ACglWcgbiR0EDP_NGdhas6k9DlOugwxKDMSvjcDCgvBR4gaP8tVoNG1vWimXe4PC3ZldoCBBUOIPMtSGrhD4ZIP6dazB0CxKYQ'
    Ce que vous voulez est en test5 je pense.

    Merci

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ce n'est pas l'encodage qui peut ajouter des caractères comme ça, c'est forcément autre chose.

    Moi, c'est le "uncrypt" qui me pose problème. Il suggère qu'on rend clair ce qui a été chiffré avant. Mais certains algorithmes de chiffrement ajoute des caractères pour compléter le format. Peut-être que le dé-chiffrement n'a pas été fait correctement. Si tu veux de l'aide, il faut en dire plus sur ce sujet.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    Bonjour,

    J'utilise de manière assez basique le module de cryptage keyczar , voir l'exemple ci-dessous que j'utilise tel quel :

    http://www.saltycrane.com/blog/2011/...ar-and-python/

    La page du projet est ici:

    http://www.keyczar.org/

    Si cela peut vous mettre sur la piste.

    Merci

  11. #11
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par polo42 Voir le message
    Si cela peut vous mettre sur la piste
    C'est surtout à toi que ça devrait mettre sur la piste. Moi, pour aller plus loin, il faudrait que j'installe et que j'apprenne ce produit dont je n'ai pas besoin.

    Fais un petit programme de test séparé. Prend un nombre simple, fais lui subir l'encryptage/décryptage, et regarde ce que ça donne. Si ça ne marche toujours pas, regarde la doc pour voir si tu n'as pas oublié quelque chose. Et si ça ne marche toujours pas, change de logiciel de chiffrement!

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Je suis d'accord avec Tyrtamos.
    En plus, votre question initiale ne mentionne même pas la biblio. que vous essayez de mettre en œuvre.
    Si vous voulez qu'on vous aide, il serait quand même plus sympa de raconter ce que vous faites et les problèmes rencontres.

    Dans votre cas, ce pourrait être:
    J'ai installe la version X du logiciel de cryptage keyczar sur Python (version) et OS (type, version).
    Et je n'arrive pas a faire fonctionner l'exemple donne a l'URL :
    from keyczar import keyczar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    s = 'secret string'
    location = '/tmp/kz'
    crypter = keyczar.Crypter.Read(location)
    s_encrypted = crypter.Encrypt(s)
    s_decrypted = crypter.Decrypt(s_encrypted)
    print s
    print s_encrypted
    print s_decrypted
    Lorsque je l'execute ca retourne ... au lieu de ...
    C'est quand même pas si complique...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    Bonjour,

    Vous avez raison,

    J'ai donc re testé avec les valeurs envoyées dans mes variables Django. Et là tout marche dans le script de test, c'est à ne rien y comprendre..

    Voici le code testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # -*- coding: utf-8 -*-
     
    from keyczar import keyczar
     
     
    def run():
        s = u'ACglWcgSDfB3owF6rqdie-x-GppEvjfdPbkBjt_zBicxKzPU-o0AaTsIjxxeqEmjaBTGkiOEdsZOCbnuLC4Bu3-2hRMFKHDeWA'
        location = "/home/mmb/key"
        crypter = keyczar.Crypter.Read(location)
        s_decrypted = crypter.Decrypt(s)
        print s
        print s_decrypted
    C'est à ne rien y comprendre, y-a-t'il un encodage caché ?

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