关于用于压缩文件的免费库的build议

我需要压缩和密码保护一个文件。 有没有一个好的(免费)图书馆呢?

这需要由第三方打开,所以密码保护需要使用标准工具。

经过多番search,我发现了三种方法:

一套免费的源代码,适合单个文件压缩。 但是,没有许可证。 用法是AesZipOutputStream.zipAndEcrypt(…)。 http://merkert.de/de/info/zipaes/src.zip(https://forums.oracle.com/forums/thread.jspa?threadID=1526137

更新:此代码现在是Apache许可和发布http://code.google.com/p/winzipaes/ 。 它为我工作(zip中的一个文件),并很好地填补了Java的开源库中的一个漏洞。

商业产品(写作时500美元)。 我无法validation这是否有效,因为他们的试用许可证方法非常复杂。 它也是一个移植的.NET应用程序: http : //www.nsoftware.com/ipworks/zip/default.aspx

商业产品(写作时290美元)。 只适用于Wnidows,因为它使用dll: http : //www.example-code.com/java/zip.asp

你可以试试Zip4j ,一个纯java库来处理zip文件。 它支持PKWare和AESencryption方法的encryption/解密。

主要特征:

  • 创build,添加,提取,更新,从Zip文件中删除文件
  • 读/写密码保护的Zip文件
  • 支持AES 128/256encryption
  • 支持标准Zipencryption
  • 支持Zip64格式
  • 支持Store(无压缩)和Deflate压缩方式
  • 从分割Zip文件创build或提取文件(例如:z01,z02,… zip)
  • 支持Unicode文件名
  • 进度监视器

执照:

  • Zip4j是在Apache许可证版本2.0下发布的。

这不是一个答案,但在评估潜在解决scheme时请谨记。

一个关于zipencryption的非常重要的事情:

有几种types的zipencryption。 旧的types(原来的zip标准的一部分)是不值得打扰的(它可以在不到10分钟的时间内通过在线轻松获取应用程序来破解)。

如果您正在对zip文件进行任何forms的encryption,请确保您使用其中一种强大的encryption标准(我相信WinZip的128位和256位AES标准是最好的支持)。 这里是技术规范 – 我们在开发自己的Javaencryption压缩系统时使用了这个技术 (不能提供源代码 – 对不起,只是内部使用)

唯一比没有encryption更糟糕的是认为你有encryption和错误:-)

7-Zip可以select在其命令行模式下添encryption码。 也许你可以执行它来获得这个结果(它也有一个很好的压缩比率)。

缺点:外部过程,很难使便携(即使7-Zip是便携本身),不确定分发许可证。

请注意,InfoZip的Zip工具也非常便携,也支持密码。

你也可以试试TrueZip。 请参阅以下链接了解function: https : //christian-schlichtherle.bitbucket.io/truezip/

TrueZip的继任者可以在这里find: https ://christian-schlichtherle.bitbucket.io/truevfs/

这里是一个使用winzipaes 1.0.1的例子。 请注意,这只是一个要点,我没有完全以这种formstesting这个代码。

import de.idyl.winzipaes.AesZipFileEncrypter; import de.idyl.winzipaes.impl.AESEncrypterBC; File aNewZipFile = new File("/tmp/foo.zip"); File existingUnzippedFile = new File("/tmp/src.txt"); // We use the bouncy castle encrypter, as opposed to the JCA encrypter AESEncrypterBC encrypter = new AESEncrypterBC(); encrypter.init("my-password", 0); // The 0 is keySize, it is ignored for AESEncrypterBC AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter); zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password"); // remember to close the zipEncrypter zipEncrypter.close(); 

您可以使用密码“my-password”在Mac上使用Winzip(v9 +)或7za(即7zip)解压缩“/tmp/foo.zip”。

注意:我不清楚为什么有必要在上面的代码中指定两次密码。 我不知道如果你在这两个地方使用不同的密码会发生什么。

如果您提供更好的使用场景,那么还有其他的select。

  1. 您是否需要通过可以处理邮政编码的标准Zip工具打开邮政编码?
  2. 和以前一样的问题是你要传递这个zip到一个需要打开zip的外部实体吗?
  3. 只是内部的,你只是想保护邮编的内容?

对于3,那么你可以使用Java来encryptionzip的stream内容作为一个普通的文件,可能最好将文件扩展名改为.ezip或其他。

对于1和2,那么你可以使用上面提到的chillkat解决scheme,或者等价的方法。 但是请注意,chillkat不是一个纯粹的Java解决scheme,它使用JNI。

附加信息:我google了一点,事实上,这是一个相当普遍的问题,似乎没有免费的解决scheme(呢?)。

现在,Zipencryption的标准algorithm已经被很好地定义了:请参阅PKWARE关于.ZIP文件格式的应用笔记 。 它似乎是在encryptionstream上完成的encryption。 如果有人觉得像编码…

现在,我想知道为什么Sun没有把它包含在它的库中? 缺乏标准? 专利/法律问题? 太弱,无法使用?

有没有一个好的(免费)图书馆呢?

java.util.zip将执行压缩,但不会执行密码。 不,我不知道会有什么免费的。 我见过的最便宜的开发人员座位是150美元。