【平庸附件】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.'
    输出结果为 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 的应用场景,以及输入数据的正确格式要求。

    上一篇:【知识附件】python的一些 内建函数,模块等知识的学习
    下一篇:【附件】python的 str.index()的index()解释

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年03月18日 11时13分14秒