
【平庸附件】python反序列化----本地测试 -----踩坑坑坑坑坑坑注意点! 这个夭折了,可以看看那些nb的
发布日期:2021-05-08 04:03:38
浏览次数:11
分类:精选文章
本文共 1541 字,大约阅读时间需要 5 分钟。
本地测试直接输入序列化字符串的经验
在直接输入二进制字符串进行序列化时,可以直接使用 pickle.loads()
进行解密。这种方法简单直观,是本地测试的首选方式。然而,如果你直接输入字符串,需要注意以下几点:
直接输入二进制字符串:
如果你直接输入一个二进制字符串(例如b'...'
),可以通过 pickle.loads()
进行解密。这种方式无需额外处理,非常便捷。手动编码为二进制:
如果你输入的是普通字符串,可以通过str.encode()
将其转换为二进制格式。这时,输出的字符串会带有 b''
前缀(例如 b'...'
),这也是 Python 的标准表示方式。通过上述方法,我们可以清晰地看到 encode()
函数的工作原理。默认情况下,它会将字符串编码为二进制数据。
阅读代码训练与学习
在阅读代码的过程中,经常会遇到一些不常见的代码行为。以下是一些值得注意的地方:
\x85
, \x86
, \x87
系列
\x85
会将栈顶的一个元素弹出,放入一个空元组中,然后将这个非空元组压入栈顶。\x86
会将栈顶的两个元素弹出,放入一个空元组中,然后将这个非空元组压入栈顶。\x87
会将栈顶的三个元素弹出,放入一个空元组中,然后将这个非空元组压入栈顶。
这些操作通常用于处理栈中的元素,而不是直接处理空元组。
输入时的 base64.b64decode
- 如果你直接输入的是一个二进制字符串(例如
b'...'
),可以直接通过base64.b64decode()
进行解密。 - 如果你输入的是普通字符串(例如
...'``),则需要先将其转换为二进制格式(例如
data.encode()),然后再进行
base64.b64decode()` 解密。
在实际操作中,输入的数据必须是经过 base64.b64encode
加密后的二进制数据。例如:
data = b"序列化后的二进制数据"encoded_data = base64.b64encode(data)# 输入的字符串应该是 `encoded_data.decode()`
这样输入的字符串才能通过 base64.b64decode()
正确解密。
实践验证
为了验证上述方法的正确性,我们可以进行以下测试:
直接输入二进制字符串
输入字符串为b'\x80\x03c__main__\nStudent\n)\x81}(X\x04\x00\x00\x00namecbb\nname\nX\x05\x00\x00\x00gradecbb\ngrade\nub.'
输出结果为 Student
和 grade
,表明解密成功。输入经过 base64.b64encode
加密的字符串
b'\x80\x03c__main__\nStudent\n)\x81}(X\x04\x00\x00\x00namecbb\nname\nX\x05\x00\x00\x00gradecbb\ngrade\nub.'
输出结果与上述相同,表明解密也成功。通过上述测试可以看出,输入的字符串必须是经过 base64.b64encode
加密后的二进制数据。请注意,手动添加 b
前缀是必要的,因为 base64.b64encode
只能接收二进制数据作为输入。
总结
在本地测试和阅读代码的过程中,理解序列化和编码机制的工作原理至关重要。通过实际操作和验证,我们可以清晰地看到 pickle.loads()
和 base64.b64decode
的应用场景,以及输入数据的正确格式要求。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月18日 11时13分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
小白学习Vue(?)--model选项的使用(自定义组件文本框双向绑定)
2019-03-05
聊聊我的五一小假期
2019-03-05
面向对象之异常处理:多路捕获
2019-03-05
Python简易五子棋
2019-03-05
MySQL8.0.19 JDBC下载与使用
2019-03-05
Vue新建项目——页面初始化
2019-03-05
Cent OS 7.6 服务器软件安装(这篇博客主要是为了方便我配置云主机的)
2019-03-05
MySQL使用系列文章
2019-03-05
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
2019-03-05
TDengine使用(一)——TDengine下载与安装
2019-03-05
ubuntu和windows之间无法复制粘贴
2019-03-05
启动加载器BootLoader
2019-03-05
力扣239. 滑动窗口最大值
2019-03-05
史上最全Vue的组件传值
2019-03-05
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
2019-03-05
如何解决vscode检测到#include错误,请更新includePath。
2019-03-05
1007 Maximum Subsequence Sum (25分) Python解法
2019-03-05
Java纯文本文件显示工具制作
2019-03-05
Unity2D Fixed Joint 2D详解
2019-03-05