You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

两初始相似文件Deflate压缩输出开头字节相似概率及实测疑问

关于Deflate压缩数据开头字节的概率分析

压缩数据前3字节相同的概率

首先明确,Deflate动态模式(dynamic mode)的开头字节是压缩块头,由以下部分构成:

  • 第1位:标识是否为最后一个块(0=非最后,1=最后)
  • 接下来2位:块类型(00=存储,01=固定哈夫曼,10=动态哈夫曼,11=预留)
  • 针对动态哈夫曼块,后续字节包含构建哈夫曼编码表的参数:
    • 5位:字面量/长度编码哈夫曼树的代码长度数量(HLIT)
    • 5位:距离编码哈夫曼树的代码长度数量(HDIST)
    • 4位:代码长度编码哈夫曼树的代码长度数量(HCLEN)

由于两个文件未压缩前20字节完全相同,且数据是99%的Base64(Base64属于高度冗余、可预测的字符集),Deflate动态压缩会针对开头的相同数据生成高度相似的哈夫曼编码表,因此压缩块头的参数会趋于一致:

  • 开头块类型必然是10(动态哈夫曼),所以前3位固定为0 10(假设不是最后一个块),对应字节的高3位无差异。
  • HLIT、HDIST、HCLEN参数会因开头相同的Base64数据大概率一致,这直接决定了前3字节的核心内容。

这种场景下,压缩数据前3字节相同的概率极高,远高于随机概率——Base64的冗余性和开头一致的输入,会让Deflate的动态编码逻辑生成几乎相同的初始编码表参数。

能否轻松推测压缩文件的前5字节

从你遇到的5个文件来看,4个开头为14 9A C7,1个为1C 9A C7,差异仅在第一个字节的低4位(14是00010100,1C是00011100),对应HLIT参数的微小调整(HLIT是5位参数,第一个字节的低5位包含其部分内容)。

虽然多数情况下前5字节会高度相似,但不能直接说“轻松推测”:

  • 当未压缩数据开头完全一致时,前5字节的一致性极高,但仍存在微小概率的参数差异(比如HLIT的微调),就像你遇到的例外情况。
  • 即便前20字节相同,后续Base64数据的微小波动,也可能导致编码表参数的小幅调整,进而改变开头的几个字节。

不过对于高度一致的Base64输入+相同的Deflate压缩实现,可以大概率推测前5字节的内容,但无法做到100%保证。

内容的提问来源于stack exchange,提问作者actgroup inc

火山引擎 最新活动