如何在Python中解压缩没有zip头的原始PKZIP数据?

问题描述 投票:0回答:1

我想从异国格式的文件中解压缩原始数据,但我知道压缩方法与 ZIP 文件 (PKZIP) 中使用的压缩方法相同。 文件中缺少 PK 签名,之后数据或多或少符合 PKZIP 标头规范:https://docs.fileformat.com/compression/zip/

  1. 2字节 - 版本= 0x0014(我不知道它是否有意义)
  2. 2 字节标志 = 0
  3. 2 字节压缩方法 = 0x0008(根据 ZIP 文档“压缩”)
  4. 随机4字节(修改次数)
  5. radnom 4 字节(应为 CRC32)
  6. 4 个字节的有效压缩大小
  7. 4 个字节的有效未压缩大小
  8. 文件名长度=0x14
  9. 额外字段长度= 0
  10. 文件名 - 20 个随机字节

然后是原始压缩数据,然后是看起来以类似方式损坏的结束记录。添加签名和有效文件名字符并将缓冲区保存到文件后,我可以使用 7zip 对其进行解压缩。它显示错误对话框,但生成未压缩的文件。生成的文件包含预期的数据。

我知道总是有一个压缩文件,并且压缩方式是固定的。文件名并不重要,所以我想应该可以只处理标头之后的压缩数据字节,也忽略结束记录。 哪个Python包提供了这样的功能? 我想忽略 ZIP 标头并仅将压缩数据缓冲区传递给 python 中的某些函数(可能指定压缩方法和一些标志)并获取未压缩数据缓冲区。没有 CRC 检查,没有文件名。

python zip compression gzip pkzip
1个回答
0
投票

如果压缩方法是 8,那么您可以使用 Python 的 zlib 模块,将

wbits=-15
传递给
zlib.decompress()
zlib.decompressobj()

© www.soinside.com 2019 - 2024. All rights reserved.