我需要压缩和密码保护文件。有没有一个好的(免费)图书馆?
这需要由第三方打开,因此密码保护需要使用标准工具。
答案 0 :(得分:47)
您可以尝试Zip4j,一个纯java库来处理zip文件。它支持PKWare和AES加密方法的加密/解密。
主要特点:
许可:
答案 1 :(得分:32)
经过多次搜索,我找到了三种方法:
免费提供的一组源代码,适用于单个文件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
答案 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)
如果您提供更好的使用方案,那么还有其他选择。
对于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美元。