将Django用户的sessiondata从Lua中的base64编码解码。
2013-12-5 11:56:47
收藏:0
阅读:110
评论:2
我正在使用Lua与Redis来从Django项目中获取任何管理员的“sessiondata”。在Django项目中,“sessiondata”被编码成base64形式。
sessiondata的取值为:
session_data =“ NzlmZjZmNWQxMGIzNTQzMDZhNDZjNzJiZGQ4OWZiY2NjNDg0NDVlZTqAAn1xAShVEl9 hdXRoX3VzZXJfYmFja2VuZHECVSlkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVs QmFja2VuZHEDVQ1fYXV0aF91c2VyX2lkcQSKAgEKdS4 =”
我的Lua代码解码会话数据是
-从django会话数据中解码base64代码
local b ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ '
local function dec(data)
data = string.gsub(data,'[ ^'..b..'=]', '')
return (data:gsub('。 'M函数(x)
if(x ==' = ')then return ' 'end
local r,f =' ',(b: find(x)-1)
for i = 6.1,-1,-1 do r = r .. (f%2 ^ i-f%2 ^(i-1)> 0 and'1 'or' 0')结束
返回r;
结束):gsub('% d%d%d?%d?%d?%d?%d?%d?'M函数(x)
if(#x〜= 8)then return ' '结束
local c = 0
对于i = 1.8 do c = c +(x:sub(i,i)== '1' and 2 ^(8-i)或0)结束
返回string.char(c)
结束))
end
当我运行print(dec(session_data))时,我得到了
output = 79ff6f5d10b354306a46c72bdd89fbccc48445ee:'} q(U_auth_user_backendqU)django.contrib.auth.backends.ModelBackendqU_autH_user_id qu。
而输出应该是
{'_auth_user_id':2561L,'_auth_user_backend't:'django.contrib.auth.backends.ModelBackend'}
像Django那样。
请告诉我我做错了什么。
点赞
用户471842
如果您正在使用 Django 1.5.3+,您可以使用 json serializer 来解决在 Lua 中尝试解码 Python Pickles 的问题;在 Django 1.6+ 中,默认为 Json serializer。
2014-03-03 11:18:00
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
一次快速的谷歌搜索返回了这篇博客文章。
以下是对会话数据解密的(精简版、未验证的)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。