我需要对文件进行压缩和密码保护。有没有一个好的(免费)库可以做到这一点?

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

有帮助吗?

解决方案

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

免费提供的一组源代码,适用于单个文件zip。但是,没有许可证。用法是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美元)。我无法验证这是否有效,因为他们的试用许可证方法很复杂。它也是一个移植的.NET应用程序: http://www.nsoftware.com/ipworks/zip/default.aspx

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

其他提示

你可以试试 Zip4j, ,一个处理zip文件的纯java库。支持PKWare和AES加密方式的加解密。

主要特征:

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

执照:

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

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

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

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

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

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

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

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

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

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

这是使用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();

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

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

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

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

    对于1和2,您可以使用上面提到的 chillkat 解决方案,或者一个等价物。 但请注意,chillkat不是纯Java解决方案,而是使用JNI。

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

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

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

  

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

java.util.zip将进行压缩,但它不会执行密码。不,我不知道会有任何免费的。 我见过的最便宜的是150美元的开发者席位。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top