我有一个用zlib压缩的数据块,现在我需要解压缩它,但是在Linux环境中只有gzip。不幸的是,没有可能获得任何其他工具。有没有办法将zlib数据“转换”成gzip可以解压缩的东西?
我读过这个:https://unix.stackexchange.com/questions/22834/how-to-uncompress-zlib-data-in-unix
在这里,它基本上被说是添加了一个10字节的头,并将它传递到gzip。但是,当我尝试这个时,我没有得到任何输出。输出文件为空。
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00" |cat - /tmp/data |gzip -dc >/tmp/out
/tmp/data包含以这两个字节开头的数据块:\x78\xDA (我将其解释为zlib头)。
有什么建议吗?我还试着在gzip头之前删除这两个字节。
编辑:经过进一步的思考,在阅读了这里的评论之后,我意识到输入的数据实际上是不正确的。使用另一个测试数据源,我得到了进一步的进展。见下面,编码为base64,因为我无法附加二进制数据。
我有资料来源:
eJwNzbEvA1EcwPEcgsUs6UIisZ17v7tre2ehaR+Kq/TaU0XEvddTd9yrtq8NFiQ1GGwisWnSQQSJwWoSJgMWxGBCYvEPEB2/y+f7WIvWhf5629jWXE/ShJ/erNDVEEgMtwXIydZ9e2DxbtLQhda60LCrO6eEuuuSZSYGrelofBBBDEvxWZAVNRiRZMBofCYWtpLZEI5OGkomHc6O9GmEFpoeybEWkuOejGQQkSoiIG6ZmwXilHjvRIEui3FW5i6vcOLb/pQ5KgJCSAHQVOKvrWJLAklGEgRRmJRzLYTnXU1FQUVHKESqax4A6IrarDDNFYgHeqj50ESQKbP9BllinlEpc6fk24yRPHNwyV2x6RLjnmGl0tg0IokEzTPuYDM+EaFVp+TAABpAM8Pjtcc9u/PrYdHJFK+f37vfAocdmxf5s5uUmJ73Lz86F/z93233c+P1++mlOPR369GrVqzvnh8dH95qB/QfS/18rQ==
然后我去掉前两个字节,这给了我以下内容:
Dc2xLwNRHMDxHILFLOlCIrGde7+7a3tnoWkfiqv02lNFxL3XU3fcq7avDRYkNRhsIrFp0kEEicFqEiYDFsRgQmLxDxAdv8vn+1iL1oX+etvY1lxP0oSf3qzQ1RBIDLcFyMnWfXtg8W7S0IXWutCwqzunhLrrkmUmBq3paHwQQQxL8VmQFTUYkWTAaHwmFraS2RCOThpKJh3OjvRphBaaHsmxFpLjnoxkEJEqIiBumZsF4pR470SBLotxVuYur3Di2/6UOSoCQkgB0FTir61iSwJJRhIEUZiUcy2E511NRUFFRyhEqmseAOiK2qwwzRWIB3qo+dBEkCmz/QZZYp5RKXOn5NuMkTxzcMldsekS455hpdLYNCKJBM0z7mAzPhGhVafkwAAaQDPD47XHPbvz62HRyRSvn9+73wKHHZsX+bOblJie9y8/Ohf8/d9t93Pj9fvppTj0d+vRq1as754fHR/eagf0H0v9fK0=
将它写入文件: /tmp/inputdata (二进制,而不是base64 ),我运行以下shell命令:
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00" |cat - /tmp/inputdata| gzip -dc >/tmp/out
这给了我这个:
gzip: corrupted data
/tmp/out的内容(同样,base64编码):
0oRDoQEmoQRIf1sfUVIx8CBZAQ2kAWJERQQaYqh/zQYaYMdMTTkBA6EBpGF2gapiY2l4L1VSTjpVVkNJOjAxREUvSVoxMjM0NUEvMjFFMEpYRDdVUVk2RUNMTTNXVDdZRiM4YmNvYkRFYmRuAmJkdGoyMDIxLTA0LTAxYmlzdFJvYmVydCBLb2NoLUluc3RpdHV0Ym1hbU9SRy0xMDAwMzExODRibXBsRVUvMS8yMC8xNTA3YnNkAmJ0Z2k4NDA1MzkwMDZidnBqMTExOTM0OTAwN2Nkb2JqMTk2NC0wOC0xMmNuYW2kYmZuak11c3Rlcm1hbm5iZ25lRXJpa2FjZm50ak1VU1RFUk1BTk5jZ250ZUVSSUtBY3ZlcmUxLjAuMFhASoTSiWEI6NFgZVdxvtjgF9walgd6rmesxFMtVFxtseYIXm2N/YBp53na69PZcT/+xmpjtQNFOYWtmaCWxjiUYw==
发布于 2021-12-10 20:35:44
你做得对。去掉前两个字节,然后加上这十个字节。然后,gzip -dc
会抱怨“文件的意外结束”,但是它还是会解压缩并将结果写入输出文件。
除非zlib流一开始就损坏了。
https://stackoverflow.com/questions/70309416
复制相似问题