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

时间:2008-10-03 11:00:26

标签: java encryption zip

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

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

9 个答案:

答案 0 :(得分:47)

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

主要特点:

  • 创建,添加,提取,更新,从Zip文件中删除文件
  • 读取/写入受密码保护的Zip文件
  • 支持AES 128/256加密
  • 支持标准邮​​编加密
  • 支持Zip64格式
  • 支持存储(无压缩)和Deflate压缩方法
  • 从Split Zip文件创建或提取文件(例如:z01,z02,... zip)
  • 支持Unicode文件名
  • Progress Monitor

许可:

答案 1 :(得分:32)

经过多次搜索,我找到了三种方法:

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

更新:此代码现已获得Apache许可,并在http://code.google.com/p/winzipaes/发布。它对我有用(zip中的一个文件),并且很好地填补了Java开源文件库中的漏洞。

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

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

答案 2 :(得分:11)

这不是一个答案,但在评估潜在解决方案时要谨记这一点。

关于zip加密的一个非常重要的事情:

有几种类型的zip加密。旧的类型(原始拉链标准的一部分)根本不值得打扰(它可以在不到10分钟的时间内通过在线轻松获得的应用程序进行破解)。

如果您正在对zip文件进行任何加密,请确保您使用强加密标准之一(我相信WinZip的128位和256位AES标准是最好的支持)。以下是technical specs - 我们在开发自己的Java加密zip系统时使用了这个(不能提供源代码 - 抱歉 - 它仅供内部使用)

唯一比没有加密更糟糕的事情就是认为你有加密和错误: - )

答案 3 :(得分:4)

7-Zip可以选择在命令行模式下添加密码。也许你可以执行它来获得这个结果(并且它也具有良好的压缩比率)。

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

请注意,InfoZip的Zip实用程序也非常便于携带,也支持密码。

答案 4 :(得分:3)

您也可以尝试使用TrueZip。有关功能,请参阅以下链接: https://christian-schlichtherle.bitbucket.io/truezip/

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

答案 5 :(得分:2)

这是使用winzipaes 1.0.1的示例。 请注意,这只是一个要点,我还没有以这种形式测试这段代码。

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”。

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

答案 6 :(得分:1)

如果您提供更好的使用方案,那么还有其他选择。

  1. 您是否要求使用可以处理zip密码的标准Zip工具打开zip?
  2. 与上一个相同的问题是您要将此zip传递给必须打开zip的外部实体吗?
  3. 它只是内部的,你只想保护zip的内容吗?
  4. 对于3然后你可以使用java来加密zip的流内容作为普通文件,可能最好将文件扩展名更改为.ezip或者也是如此。

    对于1和2,您可以使用上述chillkat解决方案或等效解决方案。 但请注意,chillkat不是纯Java解决方案,而是使用JNI。

答案 7 :(得分:1)

其他信息:我搜索了一下,确实,这是一个非常常见的问题,似乎没有免费的解决方案(但是?)。

现在,Zip加密的标准算法已经明确定义:请参阅.ZIP文件格式的PKWARE Application Note。它似乎是在加密流上完成的加密。如果有人想要编码...

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

答案 8 :(得分:0)

  

这是否有一个好的(免费)库?

java.util.zip将进行压缩,但它不会执行密码。不,我不知道会有任何免费的。 The cheapest我看到开发人员席位是150美元。