我有一个 Zip 存档,其中包含一个不会提取的大(重要)文件。我尝试过的所有 Zip 实用程序,包括那些声称可以恢复/修复损坏的 Zip 存档的实用程序都无法提取包含损坏的 zlib 压缩数据的文件。他们获取存档中的所有文件,但损坏的条目除外,后者会被跳过。
我用 C# 编写了一个小型实用程序应用程序,它解析 zip 存档、识别每个条目并解析出字段、解密数据部分,然后使用 DeflateStream(来自 zlib 的 .Net 实现)解压缩它们。一切正常,直到我到达损坏的入口。损坏的条目成功且完全解密(在 CTR 模式下使用 AES),但 DeflateStream 阅读器在抛出“坏状态(超额订阅动态位长度树)”之前只能通过大约 40MB 的解密数据。
是否有可能以某种方式“寻找”经过损坏的部分并继续解压缩数据?我想尽可能多地恢复文件,即使有一些漏洞。DeflateStream 没有实现 Seek 方法,如果我尝试创建一个新的 DeflateStream 并将底层 FileStream 定位到最后一个读取位置,它会抛出相同的“Bad State”异常。