gpt4 book ai didi

python - 如何解释这两个未压缩的 zlib 样本?

转载 作者:行者123 更新时间:2023-12-01 01:33:14 37 4
gpt4 key购买 nike

我正在尝试学习如何阅读规范。让我们看看尝试压缩后会得到什么:1) 一个空缓冲区和 2) 一个感叹号:

>>> zlib.compress(b'', 0)
b'x\x01\x01\x00\x00\xff\xff\x00\x00\x00\x01'
>>> zlib.compress(b'!', 0)
b'x\x01\x01\x01\x00\xfe\xff!\x00"\x00"'

到目前为止,我发现 x\x01 是一种神奇的格式,告诉我们正在查看未压缩的 zlib 示例。然后是我无法解释的 \x01 (我猜这意味着“后面是未压缩的 block ”)和 \x01\x00 似乎是缓冲区长度,之后有 \xfe\xff (如果我添加更多字节,它似乎会进一步减少),然后是数据和四个字节,似乎是阿德勒校验和。

现在,我的问题是:如何找到第三个字节和接下来的四个字节的含义?

此外,有没有办法跳过 Adler 校验和并仍然生成 zlib.decompress() 可以处理的内容?换句话说,是否有更短的最小 Zlib 缓冲区样本?

最佳答案

zlib 包装器的格式可以在RFC 1950 中找到。 ,其包装的deflate压缩数据的格式可以在RFC 1951中找到。 .

x\x01是 zlib header ,\x00\x00\x00\x01最后是 Adler-32 检查。中间是一个存储的 deflate block ,由 \x01 标识。 ,这是一个从最低有效位 1 开始的三位 header ,表示这是流中的最后一个 deflate block ,接下来的两位是 0,表示存储的 block 。其余五位是填充位,用于将流带到字节边界。然后是\x00\x00\xff\xff是存储 block 内容的两字节长度(0),后跟长度的补码作为错误检查。这就是空存储 block 的内容。

对于带有感叹号的存储 block ,不同之处在于长度为一(注意长度是小端顺序),后面是补码,然后是感叹号本身。 Adler-32 校验值对应一个字节的消息,即感叹号。

您可以使用zlib.compressobj可以给 wbits等于 -15请求没有 zlib 包装器的原始 deflate 流。

关于python - 如何解释这两个未压缩的 zlib 样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52617549/

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