【问题标题】:Code length of 15 not being hit in Zlib for 4KB Raw DataZlib 中 4KB 原始数据的代码长度未达到 15
【发布时间】:2022-01-08 13:40:23
【问题描述】:

我正在验证一个进行解压缩(膨胀)的硬件设计模块。解压缩的数据输出应始终为 4 KiB。作为测试数据,我使用 zlib 的 deflate 一次压缩 4 KiB 数据块,并将其作为输入提供给我的测试。我进行了多次回归,但我从未观察到代码长度为 15 的情况。您对如何得到它有什么建议,或者为什么它不可能?

【问题讨论】:

    标签: zlib deflate inflate


    【解决方案1】:

    给你:

    eF4F4cGBZdmybbnJijFt7eOR931S/14B////3//7f//v//7v//7vf//73//+97///ffff//9
    999///3333///v379+/fv3///v379+/fv3///v39/f39/f39/f39/f39/f39/f39/f39/f39
    /f39/X6/3+/3+/1+v9/v9/v9fr/f7/f7/X6/3+/3+/1+v9/v9/v9fr/f7/f7vu/7vu/7vu/7
    vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu/7vu9777333nvv
    vffee++9995777333nvvvffee++9995777333nvvvffee++9995777333nvvvffee++99957
    77333nvvvffee++99957793d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
    3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
    3d3d3d3d3d22bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2
    bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2bdu2
    bdu2bdu2bdu2bdu2bdu2bdu2bdtWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAA8P8BVoseLg==
    

    这是 zlib 流的 Base64 编码,解压缩为 4096 字节,具有 15 位符号。它是通过生成卢卡斯数 2, 1, 3, 4, 7, 11, ..., 521, 843 来构造的。初始的 2 递减为 1,以说明 deflate 中的块结束符号。然后用这些频率发射 15 个符号。 (我选择了小写字母a..oa 出现了 843 次。)结果是 2205 个字节的序列,加上块尾符号,是可能的最小的输入,可导致 15 位代码。比你的4096还小,所以确实可以生成你要找的测试向量。

    然后我附加了另外 1891 个a,将其填充到 4096 字节。这不会改变生成的霍夫曼代码。然后,您采用该序列并使用 zlib 使用 Huffman-only 策略(zlib 中的Z_HUFFMAN_ONLYpigz -zH)进行压缩,以避免 LZ77 压缩长的、重复的符号字符串。

    如果您只想要原始的 deflate 流,则删除 zlib 流的前两个和后四个字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2012-08-13
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多