[英]Decode sessiondata of Django user which is encoded into base64 in Lua
我正在使用sessiondata
和Lua从Django项目中获取任何管理员的sessiondata
。在Django项目中, sessiondata
被编码为base64形式。
sessiondata值为:
session_data = "NzlmZjZmNWQxMGIzNTQzMDZhNDZjNzJiZGQ4OWZiY2NjNDg0NDVlZTqAAn1xAShVEl9hdXRoX3VzZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZHEDVQ1fYXV0aF91c2VyX2lkcQSKAgEKdS4="我用来解码会话数据的Lua代码是
output = 79ff6f5d10b354306a46c72bdd89fbccc48445ee:�}q(U_auth_user_backendqU)django.contrib.auth.backends.ModelBackendqU _auth_user_idq� u.
当我运行print(dec(session_data))
时
{'_auth_user_id': 2561L, '_auth_user_backend': 'django.contrib.auth.backends.ModelBackend'}
而输出假设是
\n {'_auth_user_id':2561L,'_ auth_user_backend':'django.contrib.auth.backends.ModelBackend'}\n就像我们拥有的Django。
请让我知道我在做错什么。
快速的Google搜索产生了此博客文章 。
这是他必须对sessiondata进行解码的(简化的,未经验证的)python代码:
def decode(session_data, secret_key, class_name='SessionStore'):
encoded_data = base64.b64decode(session_data)
utoken, pickled = encoded_data.split(b':', 1)
return pickle.loads(pickled)
换句话说,您的期望是错误的。 未经base64版本处理的数据包含校验和哈希( 79ff6...445ee
),后跟:
然后是序列化的(通过pickle)python数据( }q(U_auth..._user_idq u.
)。
如果您真的想了解如何解码python选取的数据,请参阅PEP 307 。
如果您使用的是django 1.5.3+,则可以使用json序列化程序,这样您就不必尝试在lua中解码python泡菜了;)django 1.6+的默认Json序列化程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.