交织 bzip2 和非 bzip2 数据

Interleaving bzip2 and non-bzip2 data

我正在考虑制作一种文件格式,将两种类型的原始字节块交织在一起。

一个块将包含一个 bzip2 压缩数据块,其中 header 包含通常的 bzip2 magic number (BZh9)。

第二个块将包含其他感兴趣的数据,其中 header 包含不同的幻数 (TBD)。

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

我的问题是:是否有一个我可以为第二种块类型选择的幻数,在 bzip2 压缩的字节块中很难(或者更好,不可能)找到它?

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

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

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

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

要回答评论中的问题,整个 bzip2 流必然终止于字节边界。最后一个字节可能有 0 到 7 位的零填充。您可以从第二个流组件的开头向后搜索以查找 bzip2 结束标记 0x177245385090(pi 平方根的前 12 个十进制数字),它可以从特定字节中的任何位开始。它将返回 80 到 87 位。