【问题标题】:how to unzip an encrypted ODT OpenDocument in Java如何在 Java 中解压缩加密的 ODT OpenDocument
【发布时间】:2011-05-28 18:23:53
【问题描述】:

我有一个加密的 ODT(打开文档文本)文件,我需要解压缩它。 ODT 是一个 ZIP 文件。加密的 ODT 是一个普通的 ZIP 文件,只是 ZIP 中的一些文件被加密了。

在测试中使用 ZipFile 可以正常工作,但我不能真正使用 ZipFile,因为我在内存中有一个流,我不想使用文件。

因此我使用 ZipInputStream。但是使用 ZipInputStream.getNextEntry() 会引发可怕的 只有 DEFLATED 条目可以有 EXT 描述符 例外。

据我了解,它会抛出 ZIP 包内的第一个加密文件,例如 content.xml。因为 OpenOffice 已经加密了 xml 文件,所以压缩它可能没有意义,它被存储在未压缩的 ZIP 包中。

但 ZipInputStream 似乎有问题,我没有办法解决。

是的,加密的 ODT 文件是由 OpenOffice Writer 3.2.1 创建的。是的,现有的 ZipInputStream 甚至无法枚举其中的条目。

你有什么建议吗?

【问题讨论】:

  • 您是否尝试了解 ZipFile 的工作原理并模仿此代码?
  • ZipFile 非常快速地调用本机代码来处理文件。不幸的是,我需要在内存流中拥有它。

标签: java zip


【解决方案1】:

你可以看看ODF Toolkit library是否可以

【讨论】:

  • + 好主意。看起来很有希望。
【解决方案2】:

这个问题与加密无关,但事实是 ZipInputStream 不期望(也不知道如何处理)关联数据未 DEFLATED(即按原样存储未压缩)时的 EXT 描述符.这很可能是 ZipInputStream 中的一个缺陷(“错误”),但我对 zip 规范不够熟悉,无法知道一种或另一种方式。

一个不优雅,甚至是彻头彻尾的丑陋解决方法是将流保存到一个临时文件,然后将其作为 ZipFile 处理。

(我是ODFind和上面提到的“解密ODF文件”文档的作者。)

【讨论】:

    【解决方案3】:

    您是否偶然发现RinglordODFind 中读取加密的 ODF 文件? This ODF document(可查看为 HTML here@Google)声称根本无法仅依靠 Java 库来解密 OpenOffice.org 文档。然而,作者解释了如何利用 ODF ManifestRFC 2989PBKDF2Engine 来解密 ODF 文件的 content.xml 有效负载> 在 JBoss3 和作者的一些原创发现。

    最好的祝愿。

    免责声明:我与 Ringlord 没有任何关系,尽管上面的每个链接都指向 Ringlord 的内容。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 2011-10-30
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多