Décoder python Chaîne base64
J'ai extrait base64 chaîne de forecolor, de la texture et de edgemap valeurs des images, j'ai une liste avec structure suivante:
forecolor=AgCEAg4DUQQCBQQGARMBFQE1AmUB
edge=AfCAFg5iIATCPwTAEIiBFggBDw
forecolor=AgAsAQ0CJAMcDRgOGg8DHQYeBzYBPQ4-DU0ETgNtBm4CfQI
Je suis en train d'essayer de décoder ces valeurs, mais je suis Incorrectes Rembourrage erreur, ici, c'est l'erreur exacte:
Traceback (most recent call last):
File "ImageVectorData.py", line 44, in <module>
print "Decoded String: " + decoded.decode('base64', 'strict')
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/base64_codec.py", line 42, in base64_decode
output = base64.decodestring(input)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/base64.py", line 321, in decodestring
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
Voici mon code:
for item in value:
print "String before Split: " + item
if item.split("=")[0] == "forecolor":
decoded = (item.split("=")[1])
print "String to be decoded: " + decoded
print "Decoded String: " + decoded.decode('base64', 'strict')
J'ai aussi vu une intéressante mettre à quand la première forecolor chaîne base64 ai décodé:
Ici est le de que:
String before Split: forecolor=AgCEAg4DUQQCBQQGARMBFQE1AmUB
String to be decoded: AgCEAg4DUQQCBQQGARMBFQE1AmUB
Decoded String: ?Q5e
Je ne suis pas vraiment sûr de ce que je fais de mal ici. J'ai regardé python ci-document et essayé, mais cela ne fonctionne pas:
http://docs.python.org/library/base64.html
La valeur de
Si vous regardez le code, je ne suis qu'à essayer de décoder forecolor donc je ne pense pas que edge ne entrer en action à ce stade.
vous pouvez résoudre le problème de remplissage par l'ajout d'un couple de
Comme d'autres l'ont souligné, à savoir que le problème est avec votre entrée de données. Le peu que nous pouvons faire pour les aider avec ça... Ordure, ordure.
edge
ne semble pas être un vlaid chaîne base64, de sorte Python donne un message d'erreur. Utilisation des entrées valides, et les choses devraient fonctionner.Si vous regardez le code, je ne suis qu'à essayer de décoder forecolor donc je ne pense pas que edge ne entrer en action à ce stade.
vous pouvez résoudre le problème de remplissage par l'ajout d'un couple de
==
à la fin de la chaîne. Le plus gros problème est que le résultat décodé est totalement indéchiffrables.Comme d'autres l'ont souligné, à savoir que le problème est avec votre entrée de données. Le peu que nous pouvons faire pour les aider avec ça... Ordure, ordure.
OriginalL'auteur Null-Hypothesis | 2012-07-25
Vous devez vous connecter pour publier un commentaire.
Vous essayez de décoder une Chaîne Base64 qui n'ont pas de rembourrage. Bien que de nombreuses saveurs de Base64 n'ont pas de rembourrage, Python requiert de remplissage standard pour un décodage base64. Cette StackOverflow question a une explication plus approfondie: Python: Ignore 'Incorrect rembourrage' erreur lorsque le décodage en base64
Pour votre code, je voudrais faire des modifications similaire à ci-dessous:
En fonction de votre commentaire, il semble que vous avez aussi besoin de l'octet tableau retourné par le décodage en base64 transformé en une liste d'entiers. J'ai fait l'hypothèse que les entiers sont en little endian court ints.
Le résultat a été:
J'ai trouvé une autre technique dans une autre réponse qui fonctionne pour vos données. J'ai mis à jour la réponse. Il est tout simplement en ajoutant suffisamment de rembourrage pour tenir compte de tous les scénarios.
Merci mais le problème est décodé valeur doit être un vecteur comme 2,3,4,5 au contraire sa me donnant la chaîne d#CSs padding problème est de résoudre les données est complètement faux. Ces codé valeurs sont générées par un programme C++ ne vous a quelque chose à voir avec cela?
J'ai ajouté ma réponse à convertir dans le tableau d'octets à une liste d'entiers. Si le base64 pièce de travail, je vous recommande la fermeture de cette question et d'en ouvrir une autre avec le tableau d'octets en question.
OriginalL'auteur Jesse Harris