博客
关于我
【平庸附件】python反序列化----本地测试 -----踩坑坑坑坑坑坑注意点! 这个夭折了,可以看看那些nb的
阅读量:368 次
发布时间:2019-03-05

本文共 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.'
    输出结果为 Studentgrade,表明解密成功。

  • 输入经过 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 的应用场景,以及输入数据的正确格式要求。

    转载地址:http://ozgg.baihongyu.com/

    你可能感兴趣的文章
    (SpringMVC)springMVC.xml 和 web.xml
    查看>>
    (LeetCode)Java 求解搜索旋转排序数组
    查看>>
    ERROR 1146 (42S02): Table 'mysql.role_edges' doesn't exist
    查看>>
    Spring 与使用STOMP消息
    查看>>
    Java Swing JList:列表框组件
    查看>>
    jQuery中的动画
    查看>>
    1.2.3 项目、项目集、项目组合以及运营管理之间的关系
    查看>>
    【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
    查看>>
    LeetCode - 5. 最长回文子串——字符串、动态规划
    查看>>
    全局锁和表锁 :给表加个字段怎么有这么多阻碍?
    查看>>
    事务到底是隔离的还是不隔离的?
    查看>>
    @Import注解---导入资源
    查看>>
    二分查找与插入排序的结合使用
    查看>>
    892 三维形体的表面积(分析)
    查看>>
    40. 组合总和 II(dfs、set去重)
    查看>>
    16 最接近的三数之和(排序、双指针)
    查看>>
    279 完全平方数(bfs)
    查看>>
    875 爱吃香蕉的珂珂(二分查找)
    查看>>
    桌面图标的自动排列图标
    查看>>
    第十一届蓝桥杯python组第二场省赛-数字三角形
    查看>>