尽管CRC误差,迫使GZIP解压缩



我认为有办法做到这一点,但我不确定如何?基本上,我正在编写一个压缩程序,该程序在尝试解压缩压缩数据时会导致CRC错误。通常,这意味着解压缩器实际上将我的数据识别为正确的格式并将其解压缩,但是当将结果与CRC指示的预期长度进行比较时,它们并不相同。

但是,出于比较原因,我实际上确实想查看输出以查看它是否只是一个串联问题(如果解压缩的输出不是Gibberish,但仅以错误的顺序,这应该相对明显)。

您说的是" unzip",但问题上的问题是" gzip"。是哪个?这些是两个不同的程序,它们以两种不同的格式运行。我会假设Gzip。另外,长度不是"由CRC表示"。GZIP拖车包含一个CRC和一个未压缩的长度(Modulo 2 32 ),这是两种不同的东西。

gzip命令将在检查CRC之前对所有有效的Deflate数据进行解压缩并将其写出。因此,例如,如果我在末尾使用.gz文件并仅损坏CRC(或长度),然后做:

gzip -dc < corrupt.gz > result

然后结果将是完整的,正确的未压缩数据流。无需修改和重新编译gzip,也不需要编写自己的Ungzipper。GZIP将抱怨CRC,但所有数据都将被编写。

据我所知,

CRC检查是GZIP包装器的一部分,而不是以放气格式的实际压缩数据的一部分。

因此,您应该能够从字面上仅采用压缩数据流的字节,忽略GZIP标头和CRC,然后通过Alderter。

换句话说,您需要仅采用与GZIP文件格式规范中称为"压缩块"的字节相对应的字节,然后尝试使用Java Exprater对象进行解压缩。像格雷格(Greg)所建议的那样重新编译GZIP代码(尽管他的选择也将原则上起作用)。

最新更新