使用TrueZIP,有没有办法从流中打开和修改现有的ZIP文件(当然可以使用其他流输出)?
我有修改ZIP的代码,只要我处理文件系统上现有的真实ZIP文件,但我要求所有临时文件在存储在磁盘上时都需要加密。在我们的应用程序的大部分内容中,这很容易实现(使用CipherOutputStream和CipherInputStream)但我有一个函数使用TrueZIP来更新现有的ZIP文件。如果文件已加密,这部分显然会失败。
ZIP文件将由不支持加密的专有应用程序使用,因此无法使用作为ZIP规范一部分的加密。
我们使用TrueZIP的原因是我们需要Zip64的支持(我知道它包含在Java 7中,但我们现在无法切换)。
答案 0 :(得分:0)
不,存档文件必须存储在可访问的文件系统中才能与TrueZIP一起使用。但是你有很多其他的选择:
TrueZIP使用IOPoolService接口的实例来管理临时文件。您可以提供自己的实现来加密所有临时文件,甚至可以只将它们存储在堆上(如果它们很小)。查看TrueZIP驱动程序文件以查看参考实现。
您可以使用ParanoidZipRaesDriver来使用RAES加密的ZIP文件。此驱动程序通过限制将存档文件写入一个文件的并发线程数来确保不使用未加密的临时文件。
您可以使用带有FsOutputOption.ENCRYPT的标准ZIP驱动程序来启用WinZip AES加密。为确保不使用未加密的临时文件,您可以像ParanoidZipRaesDriver一样覆盖ZipDriver.newOutputSocket方法。