Wie dekodiert man Base64 URL in Python?
Für Facebook fbml-Apps, Facebook sendet eine signed_request parameter hier erläutert:
http://developers.facebook.com/docs/authentication/canvas
Haben die php-version der Dekodierung dieser unterschriebene Antrag:
Wie auch in python?
Habe ich versucht base64-Modul, aber ich bin immer Falsch Polsterung Fehler:
>>> base64.urlsafe_b64decode("eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyNzk3NDYwMDAsIm9hdXRoX3Rva2VuIjoiMjk1NjY2Njk1MDY0fDIuRXpwem5IRVhZWkJVZmhGQ2l4ZzYzUV9fLjM2MDAuMTI3OTc0NjAwMC0xMDAwMDA0ODMyNzI5MjN8LXJ6U1pnRVBJTktaYnJnX1VNUUNhRzlNdEY4LiIsInVzZXJfaWQiOiIxMDAwMDA0ODMyNzI5MjMifQ")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/base64.py", line 112, in urlsafe_b64decode
return b64decode(s, '-_')
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/base64.py", line 76, in b64decode
raise TypeError(msg)
TypeError: Incorrect padding
InformationsquelleAutor der Frage kevin | 2010-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anscheinend Sie verpasst die letzten beiden Zeichen beim kopieren der original-base64-kodierte string. Suffix der input-string mit zwei ist-gleich (=) Zeichen, und es wird korrekt decodiert werden.
InformationsquelleAutor der Antwort Geert
Ich haben gemeinsam eine code-snippet für die Analyse signed_request parameter einer python-basierten facebook-canvas-Anwendung auf http://sunilarora.org/parsing-signedrequest-parameter-in-python-bas:
InformationsquelleAutor der Antwort sunil
versuchen
wie schon geschrieben ist es hier
InformationsquelleAutor der Antwort dae.eklen
Alternative zu @dae.eklen Lösung, die Sie anfügen können
===
:Dies funktioniert, weil Python nur beschwert sich über die fehlende Polsterung, aber nicht die extra-Polsterung.
InformationsquelleAutor der Antwort png
InformationsquelleAutor der Antwort FazalSap
Überraschend, aber die derzeit akzeptierte Antwort ist nicht ganz richtig.
Wie einigen anderen Antworten gesagt, es ist etwas genannt base64url Codierung, und es ist ein Teil der RFC7515.
Im Grunde, die Sie ersetzt haben '+' und '/' chars durch '-' und '_' sind; und zusätzlich entfernt alle nachgestellten '=' Zeichen, da kann man immer sagen, wie viele chars du bist fehlt, nur durch die Betrachtung der kodierten string der Länge.
Hier ein illustratives Beispiel aus RFC7515 in C#:
InformationsquelleAutor der Antwort Vladimir Menshakov