我需要对文件进行压缩和密码保护。是否有一个好的(免费)库?
这需要由第三方打开,因此密码保护需要使用标准工具。
我需要对文件进行压缩和密码保护。是否有一个好的(免费)库?
这需要由第三方打开,因此密码保护需要使用标准工具。
Answers:
2020年更新:现在还有其他选择,尤其是Zip4J。
经过大量搜索,我发现了三种方法:
一组免费的源代码,适用于单个文件zip。但是,没有许可证。用法是AesZipOutputStream.zipAndEcrypt(...)。 http://merkert.de/de/info/zipaes/src.zip (https://forums.oracle.com/forums/thread.jspa?threadID=1526137)
更新:此代码现已获得Apache许可,并在https://github.com/mobsandgeeks/winzipaes(从Google代码的原始位置导出)中发布。它为我工作(zip中的一个文件),并很好地填补了Java开放源代码库中的一个空白。
商业产品(撰写本文时为500美元)。我无法验证此方法是否有效,因为他们的试用许可方法很复杂。它也是一个移植的.NET应用程序:http : //www.nsoftware.com/ipworks/zip/default.aspx
商业产品(撰写本文时为290美元)。仅适用于Wnidows,因为它使用dll:http : //www.example-code.com/java/zip.asp
您可以尝试Zip4j(纯Java库来处理zip文件)。它支持PKWare和AES加密方法的加密/解密。
主要特征:
执照:
7-Zip可以选择在其命令行模式下添加密码。也许您可以执行它以获得此结果(并且它也具有良好的压缩比)。
缺点:外部流程,难以移植(即使7-Zip本身也可以移植),不确定发行许可证。
请注意,InfoZip的Zip实用程序也具有高度的可移植性,也支持密码。
这是使用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();
您可以在Mac上使用Winzip(v9 +)或7za(即7zip),并使用密码“ my-password”来解压缩“ /tmp/foo.zip”。
注意:我不清楚目前为什么需要在上面的代码中两次指定密码。我不知道如果您在这两个地方使用不同的密码会发生什么。