我正在研究制作一种文本格式来交错两种类型的原始字节块。
一个块将包含一块bzip2压缩数据,其中包含一个包含通常的bzip2 magic number(BZh9
)的头。
第二个块将包含其他感兴趣的数据,其中包含一个包含不同幻数(TBD)的标题。
这两个幻数将用于不同地搜索,识别和处理两种数据块类型。
我的问题是:我可以为第二个块类型选择一个神奇的数字,这在bzip2压缩的字节块中是不太可能(或更好,不可能)?
换句话说,是否存在bzip2排除或在概率上不太可能在压缩时使用的特定字节,在某个统计阈值内,我可以将其用于同一文件中另一种数据类型的标头?
一个选项是,当我找到第二个块类型的头字节时,我只是尝试处理第二个块类型的数据,如果该处理失败,那么我假设我不小心在压缩的bzip2块中。但是我想知道是否有可能在bzip2块中找不到或者不太可能找到的字节。
答案 0 :(得分:2)
没有。 bzip2压缩数据可以包含任何字节对,基本上都具有相同的概率。您所能做的就是将更长的字节序列定义为签名,以降低该系列在压缩数据中意外出现的概率。但它仍然可以。
bzip2格式是自我终止的,所以如果你愿意花时间解码bzip2数据,你总能找到下一件事的地方。
要在注释中回答问题,整个bzip2流必须终止于字节边界。最后一个字节可能有0到7位零填充。您可以从第二个流组件的开头向后搜索,以查找bzip2结束标记0x177245385090
(pi的平方根的前12个十进制数字),它可以从特定字节中的任何位开始。这将是80到87位。