交叉bzip2和非bzip2数据



我正在考虑制作两种类型的原始字节块交错的文件格式。

一个块将包含一个bzip2压缩的数据块,它的头包含通常的bzip2幻数(BZh9)。

第二个块将由其他感兴趣的数据组成,它有一个包含不同幻数(TBD)的头。

这两个幻数将用于以不同的方式查找、识别和处理两种数据块类型。

我的问题是:是否有一个神奇的数字,我可以选择第二个块类型,这是非常不可能(或更好,不可能)在bzip2压缩的字节块中找到?

换句话说,是否存在bzip2在压缩时排除或可能不太可能使用的特定字节,在某些统计阈值内,我可以将其用于同一文件中另一个数据类型的头文件?

一种选择是,当我找到第二个块类型的头字节时,我将简单地尝试处理第二个块类型中的数据,如果处理失败,那么我假设我意外地进入了压缩的bzip2块。但是我想知道是否有可能在bzip2块中找不到字节,或者不太可能找到。

No。Bzip2压缩的数据可以包含任何字节对,基本上都具有相同的概率。您所能做的就是定义一个较长的字节序列作为签名,以减少该序列意外出现在压缩数据中的概率。但它仍然可以。

bzip2格式是自终止的,所以如果你愿意花时间解码bzip2数据,你总能找到下一个东西在哪里。

要回答注释中的问题,整个bzip2流必须在字节边界处终止。最后一个字节可能有0到7位的零垫。您可以从第二个流组件的开始向后搜索以查找bzip2结束标记0x177245385090 (pi的平方根的前12位十进制数字),它可以从特定字节中的任何位开始。它应该是80到87位。

相关内容

  • 没有找到相关文章

最新更新