gpt4 book ai didi

python - 从python中的actionscript读取base64/zlib编码的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 19:12:50 25 4
gpt4 key购买 nike

我将一个字符串保存到数据库中,该字符串由 Actionscript 通过对其进行 base64 编码,然后进行 zlib 压缩来编码。

示例字符串如下:“eNrj4mZkrShgWdHBx1mUmJfNosQIACUhBCI=”

如果我通过 Actionscript 解压并解压缩它,我会得到我所期望的:

{“xp”:656398,“等级”:34}

但是,我还需要能够在服务器端读取此内容。目前我正在使用 Python,但我愿意接受可行的 PHP 解决方案或类似解决方案。

到目前为止,我在 Python 中尝试过:

import base64
import zlib

s = 'eNrj4mZkrShgWdHBx1mUmJfNosQIACUhBCI='

print s.decode("base64").decode("zlib")

看起来 Actionscript 在 header 中添加了一些额外的位,但我的 Python 还不够强大,无法解决这个问题:) 任何帮助将不胜感激!

编辑:Actionscript 首先采用 AS 对象并将其转换为 ByteArray,然后 zlib 对其进行压缩并对其进行 base64 处理。看起来这就是生成额外 header /损坏的数据信息的原因。

最佳答案

如果字符串首先进行 Base64 编码,然后进行压缩,则解码应该是相反的方式!

您的示例和输出字符串不匹配;

In [1]: t = '{"xp": 656398, "rank": 34}'

In [2]: t.encode('base64')
Out[2]: 'eyJ4cCI6IDY1NjM5OCwgInJhbmsiOiAzNH0=\n'

In [3]: t.encode('zlib').encode('base64')
Out[3]: 'eJyrVqooULJSMDM1M7a00FFQKkrMywbyjU1qAVupBsE=\n'

In [4]: t.encode('base64').encode('zlib')
Out[4]: 'x\x9cK\xad\xf42Iv\xf64\xf3t\x894\xf4\xcb\xf25\xf5w.O\xf7\xcc\xf3\xcaH\xca-\xce\xf4\xcft\xac\xf2\xf30\xb0\xe5\x02\x00\xe3E\x0b\xd7'

给定的输入字符串 '{"xp": 656398, "rank": 34}' 不会生成示例输出(请参阅 Out[3] 和 Out[4])。

您还应该注意,在这种情况下,base64 编码的字符串比原始字符串更长,并且附加的 zlib 编码是最长的。压缩这么短的字符串通常不值得花费这些开销。

如果我们获取您的示例输出并对其进行处理,这就是我们得到的结果;

In [5]: s = 'eNrj4mZkrShgWdHBx1mUmJfNosQIACUhBCI='

In [6]: s.decode('base64')
Out[6]: 'x\xda\xe3\xe2fd\xad(`Y\xd1\xc1\xc7Y\x94\x98\x97\xcd\xa2\xc4\x08\x00%!\x04"'

In [7]: s.decode('base64').decode('zlib')
Out[7]: '\n\x0b\x01\x05xp\x04\xa8\x88\x0e\trank\x04"\x01'

您可以在输出中清楚地看到文本“xp”和“rank”。靠近末尾的 '"' 可以解释为整数 34。

看来您的 ActionScript 在编码和压缩数据之前对数据进行了一些修改。

关于python - 从python中的actionscript读取base64/zlib编码的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com