2017-07-02 9 views
0

Depuis deux semaines, je suis en train de lire et de résoudre ce problème, mais tout ce que j'ai essayé n'a pas travaillé :-(base64 python Hex

J'utilise Python 2.7.

je ai, pour autant que je comprends, une base64 chaîne du format: AAMkADk0ZjU4ODc1LTY1MzAtNDdhZS04NGU5LTAwYjE2Mzg5NDA1ZABGAAAAAAAZS9Y2rt6uTJgnyUZSiNf0BwC6iam6EuExS4FgbbOF87exAAAAdGVuAAC6iam6EuExS4FgbbOF87exAAAxj5dhAAA=

Je veux le convertir en une chaîne hexagonale qui devrait aboutir à 00000000194BD636AEDEAE4C9827C9465288D7F40700BA89A9BA12E1314B81606DB385F3B7B100000074656E0000BA89A9BA12E1314B81606DB385F3B7B10000318F97610000

Je l'ai essayé avec le code suivant:.

def itemid_to_entryid(itemid): 
    decoded_val = base64.b64decode(itemid) 
    decoded_val = ''.join(["%02X" % ord(x) for x in decoded_val ]).strip() 
    decoded_val = decoded_val.upper() 
    return decoded_val 


itemid = 'AAMkADk0ZjU4ODc1LTY1MzAtNDdhZS04NGU5LTAwYjE2Mzg5NDA1ZABGAAAAAAAZS9Y2rt6uTJgnyUZSiNf0BwC6iam6EuExS4FgbbOF87exAAAAdGVuAAC6iam6EuExS4FgbbOF87exAAAxj5dhAAA=' 

entryid = itemid_to_entryid(itemid) 
print(entryid) 

qui me renvoie toujours les éléments suivants: 0003240039346635383837352D363533302D343761652D383465392D30306231363338393430356400460000000000194BD636AEDEAE4C9827C9465288D7F40700BA89A9BA12E1314B81606DB385F3B7B100000074656E0000BA89A9BA12E1314B81606DB385F3B7B10000318F97610000

et je ne comprends pas, ce que je fais mal et apprécierais vraiment toute aide à comprendre ce que je fais mal.

Amitiés Ben

+0

Êtes-vous sûr de cette première chaîne hexadécimale? Je ne vois pas pourquoi cela commencerait avec tant de 0. –

+2

Votre sortie attendue est seulement la fin de la sortie réelle. Donc, vous devriez avoir une règle pour découper la partie dont vous avez besoin. –

+1

Eh bien - c'est la sortie correcte pour l'entrée donnée ... Je vais juste souligner que 'binascii.hexlify (base64.b64decode (itemid)). Upper()' est plus simple –

Répondre

0

Si vous prenez les premiers octets de l'hexagone de sortie prévu et de les convertir:

import base64 
base64.b64encode('\x00\x00\x00\x00\x19\x4B\xD6') 

vous obtenez:

AAAAABlL1g== 

qui ne correspondre au début de votre entrée.

0

La meilleure façon pour convertir base64 à chaîne hexadécimale est:

>>> base64.b64decode('woidjw==').encode('hex') 
'c2889d8f' 

Vous pouvez également essayer comme ceci:

>>> base64.b64decode('woidjw==') 

mais je ne suis pas fan de la sortie:

'\xc2\x88\x9d\x8f' 

En ce qui concerne votre demande initiale, il doit y avoir quelque chose de mal avec vos données initiales, car elle ne fonctionne pas. générer les données attendues:

>>> base64.b64decode('AAMkADk0ZjU4ODc1LTY1MzAtNDdhZS04NGU5LTAwYjE2Mzg5NDA1ZABGAAAAAAAZS9Y2rt6uTJgnyUZSiNf0BwC6iam6EuExS4FgbbOF87exAAAAdGVuAAC6iam6EuExS4FgbbOF87exAAAxj5dhAAA=').encode('hex') 

'0003240039346635383837352d363533302d343761652d383465392d30306231363338393430356400460000000000194bd636aedeae4c9827c9465288d7f40700ba89a9ba12e1314b81606db385f3b7b100000074656e0000ba89a9ba12e1314b81606db385f3b7b10000318f97610000'