博客
关于我
【平庸附件】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/

    你可能感兴趣的文章
    端口探测
    查看>>
    LeetCode:28. 实现 strStr()——————简单
    查看>>
    java 中 private default protected public 范围
    查看>>
    LeetCode:697. 数组的度————简单
    查看>>
    LeetCode:1052. 爱生气的书店老板————中等
    查看>>
    C语言的6大基本数据类型!(学习C语言小白必备!!)
    查看>>
    红黑树学习
    查看>>
    vue中导入导入 Mint-UI的注意事项
    查看>>
    Vue——mock模拟数据的使用
    查看>>
    Nginx配置反向代理与负载均衡
    查看>>
    高阶函数reduce
    查看>>
    Lionheart万汇:布林线双底形态分析技巧
    查看>>
    Lionheart万汇:台积电大幅提升资本开支,2021有望续创辉煌
    查看>>
    Lionheart万汇:新年消费结构中贵金属交易机会
    查看>>
    LHCM万汇:在需求上升中,美国贸易赤字创下历史新高
    查看>>
    Python数据处理笔记01--numpy数组操作
    查看>>
    线程同步机制和三个线程不安全例子
    查看>>
    Mybatis的入门01
    查看>>
    Vue01常见指令,axios
    查看>>
    Vue路由嵌套刷新后页面没有重新渲染
    查看>>