繁体   English   中英

解码在Lua中编码为base64的Django用户的sessiondata

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM