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 :

Python base64 decode data | Probleme


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 16
    Points
    16
    Par défaut Python base64 decode data | Probleme
    Bonjour,

    Je suis atcuellement sous une machine linux. J'ai voulu en python décoder un hashage, mais il y a une erreur dans une de mes syntaxe, mais je ne vois pas la quel, j'ai fais des recherches sur mon probleme mais je n'ai pas trouvé.

    Voici le code ecris dans la console python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import base64
    >>> base64.decodestring('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')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.6/base64.py", line 321, in decodestring
        return binascii.a2b_base64(s)
    binascii.Error: Incorrect padding
    >>>
    Ce n'est peut-être pas un algorithm en Base64?

    (Info: Ce probleme arrive sur Fedora et Crunchbang, donc je suppose que cela vien de mon code et non de ma machine).

    Je vous remerci d'avance pour votre aide.

    Cordialement, Maxou56800.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Maxou56800 Voir le message
    Ce n'est peut-être pas un algorithm en Base64?
    J'obtiens aussi une erreur sous Windows: "Incorrect padding".

    C'est une chaine de 5777 caractères, et la longueur d'une chaine encodée base64 devrait être divisible par 4 (voir http://fr.wikipedia.org/wiki/Base64).

    Mais même en ajoutant '===' pour ajuster la longueur, l'erreur subsiste.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    C'est n'est pas =\n à la fin ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    En fait, padding ou pas padding, une chaîne de 5777 caractères ne peut pas être du code base64 valide*!

    Le principe du base64 est de convertir trois octets en quatre. Cela signifie que si l’on a un seul caractère dans le dernier bloc (par ex. un convertir une chaîne de 7 caractères), le base 64 généré fera 10 caractères, plus deux == de padding. Et s’il n’y a que deux caractères à encoder, on en obtiendra trois plus un =.

    Il manque donc au moins un 5778eme caractère, plus deux ==, pour que cette chaîne puisse être du base64 valide*!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import base64
    >>> base64.decodestring("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")
    '\x18\x0c\x17\x04\x08\x16\x0f\x1c\x11\x04\x11\x02\x15\x00\x08\x1c\x12\x06\x1d\x1f\x00\x00\x19\x0b\x18\x0c\x15\x18\x0e\x02\x1d\r\x06\x10\x04\x18\x00\x17\x0c\x0b\x07\x1d\x11\x02\x02\x02\x10\x1e\x00\x06\x13\x1e\x00\x00\x01\x07\x11\x05\x11\x1c\x13\x1f\n\x0b\x10\x0c\x13\x1e\x00\x13\x0c\x0f\x01\x18\x01\t\r\x1f\x07\x1d\x1b\x1c\x1c\r\x08\x04\x0c\x1c\x11\x07\x10\x1e\x04\x1c\x08\r\x1b\x04\x04\x1e\x04\x18\x0c\x00\x07\x00\x1b\x02\x05\x05\x07\n\x1b\n\x01\x01\x04\x1e\x1d\x07\x19\x19\x1b\x1f\x12\x19\x0b\x02\x11\x08\x00\x03\x14\x04\x0c\x1e\x11\x1b\x07\x03\x0f\x1e\x0c\x1f\x01\x00\x1a\r\x11\x11\x1a\x02\x15\n\x18\t\x05\x15\r\x0b\x17\x01\x1d\n\x07\x02\x0c\x03\x11\x07\x00\x0e\x08\x15\x07\x1f\x01\x0c\x18\t\x02\x18\x00\x08\x12\x1b\x11\x01\x04\x1e\x1d\x1e\x01\x00\x07\x1f\x04\x02\x0c\x00\x10\x1b\x11\x1f\x04\x13\x1b\x0b\x00\x05\x11\x1f\x04\x1e\x1a\n\x01\x07\x10\x03\x02\x05\x04\x0b\x1a\x1d\x10\r\x14\x04\x1b\x0b\x07\x1d\x11\x0f\t\x1e\x00\x1f\x01\x0c\x07\x0f\x13\t\x19\x1a\x1b\x0e\x06\r\x11\x18\x00\x1f\x01\x0c\x07\x1f\x0e\x1e\x1d\x00\x11\n\x11\x1f\x12\x11\x00\x1c\x11\x1a\x04\x03\x14\x02\n\x01\x19\x04\x01\x02\x08\x01\x1c\x0b\x06\r\x11\n\x00\x13\x06\x00\x07\x1c\x06\t\x11\x1f\x1c\x1c\x02\x0c\x06\x05\x07\x19\x0c\x1c\x18\x00\x1a\x18\x04\x17\x1b\x07\x00\x0c\x1b\x19\r\x11\x1c\x1a\x1c\x0c\x1a\x18\x08\x13\x00\x1a\x11\r\x01\x02\x05\x1f\n\x1b\x19\x0c\x1a\x18\x0e\x1e\x1c\x1a\x1d\x05\x1d\x1f\x04\x02\x0c\x1d\x04\x0c\x17\x18\x08\x06\x0c\x03\x11\x07\x00\x19\x0f\x1d\x0c\x1d\x07\x08\x13\t\x00\x05\x1d\x06\x11\x07\x00\x05\x02\x11\x1d\x07\x1b\x07\x17\x03\x05\x15\x04\x0f\x17\x06\x01\x19\x0f\x15\x1a\x07\x13\x07\x15\x18\x14\x02\x0c\x00\x01\x04\x11\x1e\x08\x01\x1c\x0b\x1b\x07\x04\t\x14\x04\x08\x1b\x07\x1a\x1d\x1c\x13\x15\x07\n\x06\x0c\x11\x02\x02\x1f\x07\x1d\x1d\r\x11\x1e\x00\x04\x00\x01\x1a\x05\x15\x02\x00\x1c\x10\x1d\x11\r\x11\x18\x13\x11\x0f\x07\x17\r\x1b\x02\x15\x1c\x08\r\x1b\x04\x19\x19\x0f\x19\n\x0f\x00\x00\x1b\x02\x11\x15\x1c\x1a\x12\x08\x1d\x1e\x04\x1c\x06\x0c\x1e\x0c\x00\x1c\x14\x19\x1a\x1f\x01\x0c\x18\t\x12\x1d\x06\x1a\x1d\x0f\x07\x1c\x13\x1f\x1f\x0b\x1a\x08\x1a\x18\x05\x15\x05\x0f\x04\x1b\x11\x1f\x04\x1e\n\x0b\x10\x0c\x17\x03\x0c\x1d\x1c\x00\x1d\n\x15\x18\x08\x1f\x07\x1d\x04\x0c\x01\x1a\x04\x1e\x1d\x08\x15\x00\x06\t\r\x1f\x0b\x04\x11\x1d\x10\x19\x0f\x15\x1b\x0b\x17\x06\x1a\x02\x00\x19\x1a\x1d\x15\x07\x17\t\x05\x15\x04\x01\x00\x00\x12\x1f\x11\x1f\x1c\x1c\x06\x0c\x1a\x08\x13\x15\x1a\x0b\x17\x1b\x11\x18\x04\x1c\x08\x1e\x06\x0c\x07\t\x0f\x13\x0c\n\x11\n\x1b\x01\x0c\x05\x07\x07\x17\x08\x00\x05\x0e\x1e\x1a\x01\x1a\x1c\x00\x05\r\x19\x1a\x0b\x18\x08\x07\x18\x04\x17\x08\x00\x1b\x0e\x06\r\x11\x18\x00\x0b\x18\x08\x07\t\x02\x05\x1b\x07\x00\x0c\x10\x19\x0f\x03\x10\x1d\x00\x0c\x19\t\x05\x15\n\x06\x1d\x0f\x12\x1e\x04\x1d\x0c\x00\x00\r\x1b\x05\x15\x02\x0c\x1e\x1b\x1a\x11\x1e\x12\x05\x1b\x02\x11\x1a\x11\x0f\x13\x15\x1d\n\x11\x05\x15\x0f\r\x15\r\x0b\x17\x01\x1d\n\x07\x02\x0c\x03\x11\x07\x00\t\x15\x1e\x06\x00\x07\x1c\x06\x0f\x04\x1c\x1c\x07\x10\x0c\x18\r\r\x17\x06\x1c\x1d\x1d\x1c\x01\x04\x1c\x0c\x1e\x06\x00\x1a\x0f\x08\x00\x0c\n\x11\x02\x11\x1e\x02\x1b\x01\x01\x12\x0f\x07\x1f\x14\x00\x19\x01\x07\x0c\x11\x02\x04\x16\x0f\x0b\x00\x18\x01\t\r\x15\x07\x00\x11\x04\x1d\x03\x14\x1c\x08\x1e\x11\x1b\x07\x03\x0f\x1e\x0c\x1f\x01\x00\x02\t\x14\x04\n\x01\x1a\x07\x15\x05\x15\x02\x0c\x02\x11\x04\x11\x1f\x12\x11\x0e\x0b\x17\x01\x1d\n\x07\x02\x0c\r\x1b\x07\x1a\r\x08\x04\x05\x0f\x18\x0e\x1b\x1e\x08\x04\x01\x03\x11\x1c\x00\x05\r\x19\x1a\x0b\x18\x0c\x00\t\x13\x1d\x0c\r\x06\x10\x04\x18\x00\x17\x0c\x0b\x07\x1d\x01\x02\x00\x1e\x0e\x02\x1d\n\x1d\x1f\x0c\x15\x1d\x07\x06\x0c\x10\t\r\x11\x07\t\x18\x08\x1d\x1f\x04\x1e\n\x1c\r\x19\x00\x05\x0e\x1e\x0c\x00\x12\x1b\x15\x02\x02\x11\x00\x1d\x1b\x07\x10\x03\x08\x04\x0c\x03\x04\x05\x1b\x15\x04\x02\x05\x0b\x19\x06\x00\x0f\t\x19\x0f\x08\x06\x0c\x19\t\x0f\x04\x05\x0f\x17\x08\x10\t\x0c\x19\x0c\x08\x06\x08\x1a\x0f\x00\x19\x1a\x0b\x04\x1b\x11\x0f\x08\x03\x0c\x1f\x01\x0c\x18\t\x0c\x1f\x1d\r\x06\x10\x04\x18\x00\x17\x0c\x0b\x07\x1d\x15\x0e\x00\x1e\x07\x07\x06\x0c\x00\x05\r\x1e\x0c\x08\x1d\x0e\x01\x1e\x04\x00\x08\x1d\x10\x08\x1a\x1f\x12\x1f\x07\n\x1d\n\x00\x05\x0e\x1e\x07\x0f\x1d\x1b\x11\x01\x0c\x15\x1a\x07\x1b\x07\x04\t\x14\x04\x05\x0b\x00\x1b\x1b\x19\x17\x15\x1b\n\x15\x07\x07\x08\x04\x03\x1c\x1d\x01\x0c\x18\x1f\x15\x1f\x1c\x1a\x11\x0f\x1b\x05\x12\x13\x1b\x17\x04\x1d\x11\x1e\x04\x03\x1d\x1d\x1b\x1c\x02\t\x0f\x04\x0c\x03\x04\x05\x1b\x15\x04\x03\x1c\x1c\x00\x06\x01\x18\x00\x05\x19\x0f\x07\x1a\x1d\n\x05\x11\x07\x1d\x18\x0c\x17\r\x05\x02\x0c\n\x11\x05\x15\x18\x04\x1c\x0c\x18\x1d\x1a\x1d\x03\x0f\x11\x19\x0b\x15\x0e\x11\x03\x0f\x13\x1b\x17\x04\x1d\x11\x08\x04\x03\n\x06\x15\x00\x1a\t\x12\x14\x08\x07\x18\x05\x11\x19\x13\x03\x05\x0f\x06\x08\x17\x05\x0f\x15\x0e\x1c\x11\n\x05\x19\x04\x1b\x1b\x17\x04\x1d\x1b\x0f\x00\x13\x01\x0b\x1e\x1c\x07\x18\x08\x16\x00\x0b\x04\x05\x11\x05\x0f\x15\x04\x0b\x1a\x1d\x07\x03\x0f\x05\x1d\x07\x18\x00\x07\r\x15\x19\x06\x00\x17\x01\x15\x1d\x14\x15\x0f\x01\x1d\x1a\x05\x19\x04\x1c\x0c\r\x1c\x00\x12\n\x13\x15\x04\x0b\x1a\x1d\x17\x03\x04\x03\x1d\x0f\x10\x00\x06\t\r\x11\n\x01\x1a\x1f\x11\x1e\x12\x19\x06\x00\x11\x07\x17\x04\x08\x16\x0f\x1c\x11\x1a\x11\x1f\x15\x05\x1d\x07\x18\x00\x07\t\x11\x1f\x1c\x1c\x17\x08\x17\x04\x04\x02\x05\x0b\x19\x0c\x07\x1f\x00\x17\x0c\x02\x11\r\x11\x0f\t\x19\x0f\x08\x06\x0c\x19\t\x0f\x04\n\x01\x1a\x1a\x00\x05\x15\x05\x0c\x02\x15\n\x1b\x02\x17\x15\x1b\x1d\x1d\x06\x1a\x08\x04\x03\n\x06\x1d\x0f\x12\x1e\x04\x03\x0c\x00\x18\x0c\x00\x18\x13\x15\x1a\x1e\x1b\x1c\x06\x1e\x04\x04\x1b\x01\x01\x1f\x11\x1e\r\x15\x04\x0b\x07\x1a\x15\x0b\x04\x11\x05\x01\x06\x1a\x05\x19\x04\x1c\x0c\n\x11\n\x06\x15\x11\x04\x08\t\x11\n\x1b\x02\x12\x19\x1a\x1a\x11\x08\x18\t\x05\x15\n\x01\x01\x1f\x06\x05\x13\x11\x0f\x07\x1a\r\x11\x1e\x04\x00\x06\x00\x10\x1b\x11\r\r\x19\x07\x1a\x11\x1b\x06\x03\x06\x11\x1d\x07\x1b\x07\x19\r\x08\x03\x19\x01\x01\x1b\x05\x19\x04\x1c\x05\x0b\x06\x08\x1d\x1f\x0e\x1e\x07\x0b\x04\x08\x07\t\x0c\x00\x05\x01\r\x0c\x06\x0f\x04\x1d\x06\x1a\x15\x05\x11\x1c\x13\x15\x04\x07\x11\x1b\x15\x1e\x06\x05\x04\x0b\x1a\x1d\x17\x03\x0f\x03\x00\x1d\x00\x0c\x15\x1e\x04\x00\x1b\x0b\x1a\r\x06\t\r\x15\x1a\n\x1d\x0f\x12\t\x13\x15\x07\x1a\x11\x1a\x10\t\x07\x19\x07\x07\x00\x00\x1b\x02\x12\x14\x0c\x1d\x19\x06\x00\x1f\x02\x18\x00\x08\x12\x1b\x11\x1e\x05\x15\n\x06\x1d\x0f\x12\x1e\x04\x02\x0c\x1a\x10\x0c\x10\t\x02\x02\x10\x1e\x00\x0c\x06\x1a\x0e\x19\x1b\x02\x15\x1b\x00\x05\x02\x1c\x0c\r\x06\x10\x04\x18\x0e\x17\x1b\x0f\x04\x01\x1d\t\x05\x15\n\x1c\r\x19\x00\t\x13\x14\x0c\x1d\x1d\x0e\x1a\r\x0f\x04\x05\x0b\x12\x08\x1d\x18\x05\x15\x1b\x0b\x00\x1b\x1b\x19\x17\x15\x1b\x02\x11\x04\x11\x1f\x12\x11\x0e\x0b\x17\x05\x15\x05\x13\x13\x06\x1c\x06\x0c\x07\x1c\x0e\x1e\r\x0f\x1a\x1d\x15\x19\x0f\x1d\x0c\x1d\x07\x08\x13\t\x02\x18\x00\x08\x12\x1b\x11\x1f\x00\x1e\x1a\x1e\x1b\x1a\x07\t\x05\x15\x1b\x02\x15\n\x18\t\x05\x15\r\x0b\x17\x01\x1d\n\x07\x02\x0c\x03\x11\x07\x00\x00\x14\x03\x08\t\x11\x1d\x11\x00\x10\x05\x00\x02\x00\x0c\x1a\x08\x00\x03\x0c\n\x11\x1f\x11\x00\x0e\x00\x19\x0b\x06\r\x01\x1c\x12\x15\x1c\n\x1b\n\x1b\x19\x11\x1c\x0c\r\x06\x10\x04\x18\x04\x02\r\x0b\x17\x1b\r\x1c\x15\x15\x1b\x18\x15\x1a\x1d\x01\x11\x1c\x0c\x03\x11\x07\x00\x00\x04\x03\x0f\x0f\x1d\x1b\x11\x18\x04\x1e\r\x1c\x11\x08\x18\t\x15\x11\x1d\n\x11\x1a\r\x02\x0e\x1e\x10\x03\x11\r\x11\x0f\t\x19\x0f\x08\x06\x0c\x06\x08\x04\x13\x01\x07\x12\x0f\x06\t\x13\x04\x06\x1b\x00\n\x1b\x01\x0c\x15\x05\x0b\x07\x08\x1a\x0b\r\x1f\x19\x06\x1b\x07\x11\x1f\x00\x06\x0c\r\x11\x07\x17\x05\x11\x18\x0c\x1c\x10\x0c\x17\x05\x11\x18\x0c\x1c\x11\x1d\x11\x02\x02\x02\x10\x1e\x00\r\x11\x0f\x13\t\x19\x1a\x15\x00\x1a\x1f\x08\x00\x05\x1b\x00\x06\x00\x1d\x14\x15\r\x0b\x13\x08\x13\x02\x04\x02\x1c\x00\x1a\x06\x01\x1a\x04\x11\x1c\x03\x1b\x1d\x11\x02\r\x1f\n\r\x01\x1b\x06\t\x0f\x13\x0c\r\x06\x10\x04\x18\x04\x02\x1a\x0f\x1a\x1a\x1a\x03\x14\x06\x0c\x0f\x01\x1a\x11\x02\x12\x1e\x06\x1b\x07\x19\x11\x1e\x05\x02\x06\x00\x07\x1c\x1a\r\x0f\x13\x00\x0b\x1a\x1a\x11\x02\x12\x1c\x0c\x1d\x11\x07\x07\r\x02\x04\x1c\x0b\x18\r\x11\x08\x04\x13\x1b\x17\x04\x1d\x11\x1e\x14\x1e\x1a\x17\x07\x1d\x11\x01\x04\x14\x0c\r\x1c\x00\x12\n\x13\x15\x04\x0b\x1a\x1d\x11\x1f\x15\x14\x00\x1a\x07\x10\x19\t\x15\x02\x00\x1f\x01\x0c\x05\x19\x00\x1e\r\x07\x18\x1c\x00\x05\r\x19\x1a\x0b\x18\x08\x19\x01\x04\x13\x05\x0b\x04\x06\x01\x1e\x02\x18\x00\x08\x12\x1b\x11\x1e\x04\x04\r\x0b\x17\x01\x1d\n\x07\x02\x0c\x1c\x15\x1a\r\x01\x04\x04\x1b\x07\x05\x1c\x11\x1d\x14\x11\x07\n\x1d\x05\x01\x18\x08\x1c\x00\x1d\x11\r\x11\x1f\x02\x1c\x0c\x1d\x10\x00\x12\n\x04\x02\x0c\x00\x00\x0c\x07\x19\x0f\x15\x19\x0f\x1d\x1b\x11\x0f\x0e\x1d\x19\x01\x07\x0c\x11\x08\x14\x1e\x0c\r\x18\x0c\x04\x19\x03\x1c\x00\x1f\x01\x0c\x07\t\x13\x06\x08\x00\x00\x08\x01\x0f\t\x19\x0f\x08\x06\x0c\x19\t\x0f\x04\x0c\x1a\x10\x1c\x1a\t\x02\x1c\x0c\x1e\x06\x00\x02\t\x04\x03\x0c\x1c\x02\x08\x1a\x18\x00\x14\x0c\r\x1c\x00\x12\n\x13\x15\x1b\x02\x11\x19\x1b\x05\x0f\x04\x0f\x01\x1a\r\x15\x01\x04\x1e\x1d\x0f\x18\x1a\x1b\x19\x15\x15\x07\x0f\x1a\x1d\x17\t\x15\x04\x0c\n\x11\n\x1b\x01\x11\x1f\x1a\x07\x00\x00\x1b\x02\x11\x05\x0b\x02\x1d\x18\x01\t\x11\x02\x00\x18\x11\x0c\x11\x1f\x15\x1c\x00\x03\x04\x06\x07\x1f\x08\x12\x00\x02\x1d\x1d\x11\x0f\x00\x1c\n\x1b\x18\x08\x00\x03\x08\x02\x0c\n\x11\r\x11\x08\x14\x19\x1b\x0b\x18\x08\x17\x00\x04\x00\x1b\x07\x02\x0c\x11\x08\x04\x1c\x08\r\x18\x0c\x04\x19\x03\x1c\x00\x1f\x01\x0c\x18\t\x12\x1d\x0c\x1a\x1c\x06\x10\t\x12\x1c\x0c\x1d\x04\x05\x01\x1f\x02\x1f\x07\x00\x01\x0c\x07\x1f\x0e\x1e\x1d\x02\x11\r\x11\x1f\r\x15\x1d\x1c\x1d\x19\x18\t\x05\x15\x1a\x0b\x00\x05\x15\t\x12\x00\x06\x1b\x06\x05\x15\x0f\x13\t\x19\x1a\x1b\x0e\x06\r\x11\x18\x00\x0b\x07\x10\x19\t\x15\x02\x00\x1f\x01\x0c\x11\x18\r\x15\x1b\x1d\x15\x19\x1b\x19\x13\x1c\x08\r\x06\x10\x04\x18\x0e\x17\x1b\x0f\x04\x01\x1d\t\x00\x03\x10\x03\x11\x1d\x06\x05\x10\x05\x0c\x0f\x01\x1a\x07\x05\x00\x00\x19\x0b\x18\x0c\x11\x0f\x13\t\x19\x1a\x1b\x0e\x06\r\x11\x18\x00\x0b\x15\n\x18\t\x11\x05\x0b\x02\x1d\x18\x01\t\r\x05\x1d\x07\x18\x00\x07\r\x15\x19\x06\x00\x10\x1c\x1a\x1f\x18\x03\x1d\x0b\x19\x0c\x07\x15\x0c\x15\x1d\x1c\x1d\x18\x01\t\x0e\x05\x08\x1d\r\x04\x11\x18\x13\x19\x18\x1b\x11\r\x11\x1c\x04\x1e\r\n\x11\x1a\x00\r\x02\x18\x0c\x1d\x15\x08\x17\x0f\x0e\x1d\x19\x02\x1d\x1b\x18\r\x02\x02\x10\x1e\x00\x06\x13\x1e\x00\x00\x01\x07\x11\x08\x07\x15\x0c\x15\x1d\x1c\x1d\x18\x01\t\x11\x02\x0c\x1d\x11\x07\x00\t\x05\x15\x1c\x16\x1d\x07\x00\t\x13\x04\x1a\x03\x15\x03\x11\x19\x13\x03\x0c\x02\x18\x0c\x07\x19\x11\x00\x1b\x07\x19\x0c\x18\t\x11\x02\x06\x0c\x18\x0c\x19\t\x05\x15\x1d\x1c\x15\x07\x07\x01\x08\x03\x1a\x07\x1b\x07\x07\t\x02\x05\x1b\x07\x07\x0c\x11\x08\x04\x1c\x08\r\x18\x0c\x11\x18\x04\x1c\x05\x0b\x04\x0c\x06\x01\x04\x04\x05\x0f\x07\x00\x13\x02\x00\x04\x1c\x1c\x11\x0c\x18\t\x02\x04\x1b\x01\x1a\x00\x05\x19\x04\x15\x05\x02\x11\x07\x11\x1e\x04\x1d\x19\x02\x15\n\x11\x0f\x04\x00\x0c\x00\x10\x08\x1a\x18\x11\x11\x1a\x02\x11\x1a\x07\x15\x12\x04\x0c\x03\x11\x1a\x07\x15\x0c\x15\x1d\x1c\x1d\x18\x01\t\x12\x13\x08\x1c\x07\x0c\x07\x18\x04\x1d\x19\x1d\x10\x0c\x17\r\r\x13\x1c\x02\x07\x06\x1a\x18\x0f\x15\x1d\x1a\x11\x04\x11\x02\x15\x00\x05\x1b\x07\x05\x1b\x02\x06\x03\x05\x0b\x07\x06\x04\t\x13\x11\x1d\x07\x1b\x07\x07\x08\x04\x13\x01\x07\x12\x0f\x06\t\x0c\x15\x07\x1a\x11\x1d\x10\t\x02\x1f\r\x0f\x13\x0c\x12\x03\x0f\x04\x19\x0f\x06\x1d\x1d\t\x05\x15\x05\x0f\x00\x01\x11\x03\x13\x19\x0c\n\x11\x05\x1d\x02\x07\x1f\x1b\x03\x15\x1d\x1d\x03\x0f\x15\x1d\n\x11\x05\x15\x18\t\x15\x06\x1c\x1d\x0c\x10\t\x12\x13\x06\n\x11\x1a\x18\r\x05\x19\x0f\x08\x11\x1b\x11\x02\x02\x15\x0c\x1d\x07\x0c\x1a\x18\x08\x15\x05\x02\x11\x1b\x11\x1f\x08\x14\x0c\n\x15\x07\x07\x00\x00\x06\x06\x02\x1b\x07\x00\t\x05\x15\x19\x1c\x1b\x1d\x11\x0b\x04\x02\x05\x0b\x07\x00\x1a\n\x0e\x02\x04\x0f\x00\x00\x1b\x02\x12\x15\x1d\n\x11\x04\x04\x0f\t\x15\x1b\n\x11\x1a\x00\x05\x04\x02\n\x0b\x07\x19\x11\x1e\x12\x1f\x07\x00\x11\x1a\x10\r\x02\x13\x0c\n\x11\x1b\x15\x19\x19\x14\x06\x00\x1a\x0c\x11\x1f\x05\x11\x07\x1d\x18\x0c\x17\r\x12\x14\x1c\r\x1c\x00\x12\n\x13\x15\x04\x0b\x1a\x1d\x18\t\x02\x1f\r\x0f\x13\x0c\x17\x03\x0f\x03\x00\x1d\x00\x0c\x15\x18\x13\x11\x07\x1d\x12\x06\x06\x01\x04\x02\r\x0b\x18\x00\x1a\n\x0e\x02\x04\x0f\x00\x00\x1b\x02\x05\x15\x1a\n\x1b\x07\x1a\t\x04\x03\x1f\x0b\x06\x1a\x01\x02\x04\x1e\x1a\x0b\x19\x0b\x18\t\x05\x15\x04\x01\x00\x1a\x17\x04\x00\x13\x1c\x00\x10\x0c\x17\t\x12\x1d\x06\x1a\x07\x0c\x07\x18\x02\x1f\x07\x1d\x00\x00\x00\x19\x04\x14\x0c\x1d\r\x04\x16\x03\r\x15\x1a\x02\x15\n\x1b\x01\x11\x02\x0c\x1d\x07\x00\x1b\x02\x04\x03\x1d\x1b\x1a\n\x1b\x08\x00\x17\x0c\x01\x1a\x1d\x06\r\x0f\x03\x0f\x01\x06\x04\x11\x00\x04\x03\r\x01\x1a\x07\x11\t\x12\x06\x0c\x1c\x07\x1c\x1a\t\x0f\x03\x0c\x03\x16\x05\x11\x08\x04\x1d\x06\x1a\x07\x08\x10\t\x10\x05\x08\x1a\x07\r\x11\x1f\x15\x19\x07\x0b\x07\x08\x06\t\x05\x05\x00\x1c\x11\x05\x15\x18\x00\x19\x05\x02\x11\x04\x15\x05\x12\x19\x05\x00\r\x08\x04\r\x12\x14\x0c\x18\x1b\x05\x1b\x02\x15\x15\r\x0b\x10\x00\x07\x1f\x08\x1d\x1c\x02\x11\x1b\x16\x05\x04\x1e\x18\x1b\x11\n\x11\x00\x00\x03\x0c\x08\x15\x1a\x07\t\x08\x1d\x19\x02\x1d\n\x1d\x18\x04\x1d\x0c\x00\x00\x0c\x1a\x1e\x04\x1e\r\x0f\x1a\x1d\x04\x00\x14\x03\r\x07\x12\x0f\x1d\x0f\x08\x1c\x0c\n\x15\n\x17\t\x12\x1c\x0c\r\x1b\x07\x00\t\x0f\x05\x05\x0b\x17\x06\x10\t\x05\x11\x07\x1d\x18\x0c\x07\t\x0f\x03\n\x1c\r\x19\x00\x03\x06\x02\x08\x1e\x1c\x00\x05\x19\x04\x14\x1c\x1a\x11\x1b\x19\t\x15\x02\x08\x18\x15\x00\x18\x00\x04\x11\x1c\x00\x1d\x1f\x11\r\x14\x14\x0c\x02\x15\x1a\x11\x01\x00\x1e\x1d\x07\x05\x1c\x11\x00\x04\x03\x04\x01\x00\x1a\x1b\x19\r\x15\x1a\x1e\x1c\x1b\x15\x1f\x04\x03\x19\x0f\x06\x0c\x0c\t\x0c\x00\x05\x0b\x01\x07\x17\x03\x05\x15\x19\x01\x01\x1b\x06\r\x13\x15\x04\x1e\x18\x08\x17\t\x13\x1c\x0c\x03\x1b\x1d\x15\x1a\x08\x1f\x07\x1e\x15\x1b\x01\x02\x0f\x05\x04\x0b\x06\x06\x18\t\x02\x18\x00\x08\x12\x1b\x11\x01\x04\x1e\x1d\x1a\x06\x08\x02\r\x08\x1c\x05\x0b\x07\x1c\x06\x08\x04\x03\n\x01\x19\x19\x1b\x1f\x00\x1e\x1d\x0b\x07\x19\x18\x19\x12\x15\x05\x0b\x19\x0c\x1a\x18\x00\x19\x1b\x0b\x07\r\x01\x01\x04\x03\x1a\x0f\x13\x0c\x18\t\x12\x1c\x0c\x1a\x00\x1b\x11\x1f\x0e\x05\x05\x0b\x07\x0b\x1d\x18\x12\x03\x08\x00\x07\x1a\x1d\x02\x15\x15\x1b\x0b\x07\x1a\x11\x1e\x00\x1c\x08\x1d\x1d\x0e\x1a\x05\x07\x19\n\x0f\x00\x00\x1b\x02\x05\x05\n\x01\x1a\x1d\x11\x02\x14\x05\x07\r\x1b\r\x11\x02\x04\x13\x0c\x1d\x07\x00\x00\t\x14\x1e\x0c\x1a\x15\x0b\x18\t\x05\x15\n\x01\x1a\x1f\x11\x1e\x12\x19\x06\x00\x15\x1c\x07\x1f\x08\x11\x19\x1e\x11\x05\x11\t\x05\x19\n\x1a\x1d\x06\x1a\x02\x00\x19\x1b\x0b\x17\x06\x10\t\x03\x1f\x06\x05\x11\x07\x15\x02\x06\x1c\x08\x07\x07\n\x11\x0f\x08\x15\x1d\x0f\x1a\x1d\x17\x03\x05\x15\x0c\x1a\x17\x01\x1d\n\x07\x02\x0c\x03\x11\x07\x00\x1f\x0e\x1e\x1d\x1d\x1b\x1c\x02\t\x0f\x04\x0c\x03\x04\x05\x1b\x15\x04\x03\r\x0b\x19\x08\x1a\x05\x04\x02\x0c\x1d\r\x07\x1b\x02\x18\x1d\x0c\x03\x15\x05\x13\x1e\x04\x13\x0c\x1a\x00\x0c\x10\x05\x07\x16\x0c\x1c\x11\x07\x17\t\x0e\x1e\x19\x0b\x01\x1d\x15\x19\x12\x03\x00\r\x1b\x07\x07\x05\x05\x15\x1b\x0b\x06\x18\x01\t\r\x15\n\x06\x1d\x0f\x12\x1e\x04\x1d\x0c\x00\x00\r\x1b\x05\x15\x02\x0c\x1d\x1d\x1a\x00\t\x13\x11\x1c\x00\x15\r\x02\t\x13\x03\x08\x07\x06\x0c\x1d\x02\x15\x15\x05\x02\x1d\x0e\x11\x02\x15\x01\x1c\x07\x04\x0c\x01\x18\x00\x04\x1d\x0f\x05\x1c\x11\x1e\x05\x15\x19\x02\x01\x1a\x1d\t\x14\x02\x1a\x03\x15\x07\x1d\t\x13\x15\x1a\x0f\x18\x06\x06\x1f\x10\x05\x0c\x02\x11\n\x1b\x08\x00\x17\x0c\x0b\x07\x1d\x10\t\x12\x04\x00\x00\x11\x08\x01\x02\x04\x04\x1b\x0f\x1a\x1a\x19\x05\x12\x03\x00\x01\x1a\x1a\x01\x1e\x14\x1e\n\x0f\x1a\x08\x18\x1d\x14\x19\x19\x0b\x01\x1d\x00\x1e\x04\x00\x06\x1a\x11\x07\x00\x05\x04\x1c\x05\x0b\x19\x0c\x1a\x18\x03\x02\x1c\x07\x00\x0c\x17\t\x03\x02\x1c\x07\x00\x0c\x07\x18\x14\x1e\x19\x06\x11\x07\x1b\x01\x04\x1e\x0c\x0f\x18\x0c\x15\x18\x0e\x19\x1b\x0b\x05\x1c\x1d\x02\x00\x00\x08\x1d\x10\x00\x1a\x18\x04\x1c\x05\x07\x13\x0c\x1a\x0f\x04\x19\x07\x1a\x06\x00\x1a\x1f\x04\x01\x1c\x0b\x19\x08\x1d\x1f\x11\x15\x1c\x1a\x00\x06\x01\x18\x04\x16\x06\x07\x07\x1d\x06\t\x05\x15\n\x1c\x1d\x1d\x19\r\x15\x18\x0c\x03\x15\x1d\x1d\x1d\x14\x15\x04\x0b\x1a\x1d\x18\t\x02\x1f\x07\x1a\x06\x06\x18\t\x05\x11\n\r\x11\x1a\x04\x03\x14\x02\x05\x0f\x00\x0c\x18\t\x17\x19\x1a\x07\x1b\x07\x11\x02\x00\x1e\x0e\x02\x15\x00\x07\x0f\x0e\x1e\r\x07\x00\x00\x1b\x02\x00\x1c\x08\r\x17\x0c\x07\x1f\x0e\x05\n\x0f\x17\x06\x1a\x1f\x08\x03\x1d\x0b\x15\n\x1c\x05\x07\x16\x1b\x0b\x06\x05\x11\x1f\x05\x1f\x07\x00\x11\x0c\x07\x1a\x08\x14\x0c\x01\x05\x1c\x1d\x02\x04\x14\x06\x07\x02\x0c\x1a\x18\x11\x1f\x1c\x18\x1b\x00\x06\x18\x13\x15\x05\x1b\x11\x1a\x05\x19\x04\x00\x08\x1c\x18\x0c\x07\x1f\x04\x05\x05\x1d\x01\x1a\x15\x0b\x04\x02\x1a\x1e\x15\x10\x15\x02\x15\x05\x07\x0f\x16\x06\x1a\x02\x04\x1d\x0c\x00\x00\x05\x11\x08\x04\x13\x01\x07\x12\x0f\x06\t\x0c\x15\x07\x1a\x07\x0c\x12\r\x08\x04\x08\x02\x15\x00\x10\t\x05\x05\x07\x1a\x11\x1b\x19\x05\x0f\x11\x05\x1d\x11\x1d\x00\x03\x11\x12\x06\x16\x17\x06\x1a\x18\x04\x1e\x08\x00\x00\x05\x11\x01\x0e\x14\x1c\x02\x11\r\x11\x08\x04\x13\x01\x07\x12\x0f\x06\t\x0c\x15\x07'
    Je vous remerci, il manquais un "=". Mais, le résultat me donne sa. Que faut-il, comment décoder sa? De quel algorithme s'agit-il?

    Il me semble que c'est cet algorithme qui a permis a encoder la string de base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def cipher(key, cleartext):
    	assert cleartext.isalpha()
    	assert len(key) == 8 ;
     
    	ciphertext = ""     #Ciphertext
    	c = 0 ;        # index on the actual key character
    	for i in cleartext:
    		ciphertext += chr(ord(key[c]) ^ ord(i));
    		c += 1
    		if(c >= len(key)):
    			c = 0;
    	return base64.b64encode(ciphertext)
    Merci d'avance pour votre aide.

    Cordialement, Maxou56800.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    La chaîne que tu obtiens est simplement une chaîne binaire (chaque "\x0c" correspond à un octet, représenté en hexadécimal).

    Il faut que tu la passes dans la fonction decipher qui est le pendant de ta cipher (en lui fournissant évidemment la clé de cryptage).

    PS: ton code (bien plus lisible avec les balise [ code ]) doit ressembler à ça*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def cipher(key, cleartext):
        assert cleartext.isalpha()
        assert len(key) == 8 ;
     
        ciphertext = "" #Ciphertext
        c = 0 ; # index on the actual key character
        for i in cleartext:
            ciphertext += chr(ord(key[c]) ^ ord(i));
            c += 1
            if(c >= len(key)):
                c = 0;
        return base64.b64encode(ciphertext)
    Outre les divers problèmes syntaxiques et optimisations possibles, il me semble tout simplement erroné, car amha ord(key[c]) ^ ord(i) dépassera très souvent 255, donc non-reconvertible en char… Mais là, on rentre dans la crypto, qui n’est pas précisément ma spécialité .

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par mont29 Voir le message
    La chaîne que tu obtiens est simplement une chaîne binaire (chaque "\x0c" correspond à un octet, représenté en hexadécimal).

    Il faut que tu la passes dans la fonction decipher qui est le pendant de ta cipher (en lui fournissant évidemment la clé de cryptage).

    PS: ton code (bien plus lisible avec les balise [ code ]) doit ressembler à ça*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def cipher(key, cleartext):
        assert cleartext.isalpha()
        assert len(key) == 8 ;
     
        ciphertext = "" #Ciphertext
        c = 0 ; # index on the actual key character
        for i in cleartext:
            ciphertext += chr(ord(key[c]) ^ ord(i));
            c += 1
            if(c >= len(key)):
                c = 0;
        return base64.b64encode(ciphertext)
    Outre les divers problèmes syntaxiques et optimisations possibles, il me semble tout simplement erroné, car amha ord(key[c]) ^ ord(i) dépassera très souvent 255, donc non-reconvertible en char… Mais là, on rentre dans la crypto, qui n’est pas précisément ma spécialité .
    J'ai mis les couleurs syntaxiques que j'avais oublié. Je te remerci pour tes informations apportés au niveau des octets en Hexadecimal. Je vais continuer a faire des recherche en espérent trouver la solution un jour. :p

    Cordialement, Maxou56800.

Discussions similaires

  1. [ZF 1.9] Problème base64 decode
    Par vince29 dans le forum Zend Framework
    Réponses: 10
    Dernier message: 30/06/2011, 11h21
  2. [EF] [Dynamic Data] Probleme format date
    Par lvedrines dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/04/2011, 18h43
  3. Librairie pour decoder data matrix
    Par haladiah dans le forum C#
    Réponses: 1
    Dernier message: 12/01/2010, 22h48
  4. Réponses: 1
    Dernier message: 20/08/2009, 12h12
  5. [Base64]: decoder une chaine encoder au format base 64
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/08/2005, 10h18

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