两个 zlib 数据之间的差异(相同值)

问题描述 投票:0回答:1

我正在处理 3 天以来的 zlib 数据,但我无法摆脱这个问题:

zlib原始压缩数据hex如下:

789c34c9410e82301005d0bbfc756b5a832ee62a94900146255620ed80314defae1b772f79050a5af6180df21feb06f2ce6002153c84930ec2dacf8b4a3a38821a7fbefcbed7c4a3805ab401775679f3c76e69b27bb6c259bd1d6cf3bc5d034c0978cd635a7300b993ab1dba5abf000000ffff

我使用 zlib python 库生成的十六进制如下:

789c35c9410e82301005d0bbfc756b5a832ee62a94900146255620ed80314defae1b772f79050a5af6180df21feb06f2ce6002153c84930ec2dacf8b4a3a38821a7fbefcbed7c4a3805ab401775679f3c76e69b27bb6c259bd1d6cf3bc5d034c0978cd635a7300b993ab1dba5abfb1bd28150000ffff

任何人都可以向我解释这两个值之间的区别吗?

import zlib, json
ZLIB_SUFFIX = b'\x00\x00\xff\xff'
data = json.dumps({
        "t": None,
        "s": None,
        "op": 10,
        "d": {
            "heartbeat_interval": 41250,
            "_trace": [
                '["gateway-prd-us-east1-b-4kf6",{"micros":0.0}]'
            ]
        }
    }, separators=(',', ':')).encode('utf-8')
deflate = zlib.compressobj(6, zlib.DEFLATED, zlib.MAX_WBITS)
result = deflate.compress(data) + deflate.flush() + ZLIB_SUFFIX
print(result)
python python-3.x zlib deflate
1个回答
2
投票

原始流没有终止,因此无效,并以一个空的存储块结束。您生成的 已终止且有效,但后面跟着一个无关的 00 00 ff ff

。两者都解压缩为相同的数据,但原始数据未使用校验值进行验证。你生成的那个是。

你的

ZLIB_SUFFIX

不是这样的东西。它 
is 是一个零长度和该长度的补码,它将跟随压缩流中存储的块头位。但是,如果它 not 跟随压缩流中存储的块头位,则它没有这样的含义,您生成的就是这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.