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


75

我需要对文件进行压缩和密码保护。是否有一个好的(免费)库?

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


9
这样有用的问题是如何解决的?
德米特里·扎耶采夫

2
因为Meta认为可能会稍微转变为见解的有用问题并不适合于StackOverflow。这是可悲的,但却是事实。
2014年

Zip4j支持文件列表的加密:stackoverflow.com/questions/15085249/…–
kinjelom

Answers:


35

2020年更新:现在还有其他选择,尤其是Zip4J


经过大量搜索,我发现了三种方法:

一组免费的源代码,适用于单个文件zip。但是,没有许可证。用法是AesZipOutputStream.zipAndEcrypt(...)。 http://merkert.de/de/info/zipaes/src.ziphttps://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


是否有人链接到如何使用此链接中发布的winzipaes代码?我需要添加多个文件,并可以帮助您理解如何使用它
frak

@frak查看AesFileEncrypter的源代码:您要做的就是创建该类的实例,然后将所需的内容添加到该类中。
克里斯托弗·舒尔茨


53

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

主要特征:

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

执照:


1
而且它也可以完美地与Android配合使用:)出色的示例库+1!
杰伊·西德里

5
好像Zip4j被抛弃了:-/
Patrick Cornelissen

仍然可以。
Deniss M.

1
@PatrickCornelissen它被废弃了几年,但自2019
Srikanth Reddy Lingala

12

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

关于zip加密的一件事很重要:

zip加密有几种类型。旧类型(原始zip标准的一部分)一点也不值得打扰(可以在不到10分钟的时间内使用在线轻松获得的应用将其破解)。

如果要对zip文件进行任何形式的加密,请确保使用一种强大的加密标准(我认为WinZip的128位和256位AES标准是最受支持的)。这里是技术规格-我们在开发自己的Java加密zip系统时使用了此技术(无法提供源代码-对不起-仅供内部使用)

比没有加密更糟糕的是,您以为自己加密了并且错了:-)


2
您可能要同时支持两者。Windows资源管理器尚不支持AES加密的zip文件,而PKZIP加密的zip文件仍受Windows资源管理器支持。您可以查看任一类型的加密zip文件的条目,但只能使用Windows资源管理器从PKZIP加密(弱加密)的zip文件中提取。在Windows上,您将需要WinZip或其他合适的工具来打开AES加密的zip。(免费的DotNetZip附带了这样的工具)。
Cheeso

Windows XP SP3和Vista均支持AES zip文件。我的观点(任何人都可以自由地反对)是,支持甚至不是远程安全的事物也是一个坏主意。M $不支持安全格式不是实施不安全内容的正当理由。
凯文·戴斯2009年

Winzipaes创建的(参见上文).zip文件无法在此处的最新Windows XP映像上打开,Windows抱怨有关不受支持的压缩方案。但是,它们确实可以在7z下打开。
汤姆·奇弗顿

4

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

缺点:外部流程,难以移植(即使7-Zip本身也可以移植),不确定发行许可证。

请注意,InfoZip的Zip实用程序也具有高度的可移植性,也支持密码。


我相信7-zip的库可用于自编写程序,因此它不必是外部过程。
Quagmire,

@Quagmire 7-zip没有本地Java版本(LZMA算法除外),因此使用7z处理ZIP文件将需要外部过程。
克里斯托弗·舒尔茨

确实是@ChristopherSchultz。我想也可以编写一个JNI或JNA包装器,以减少麻烦。
PhiLho 2012年

还值得指出的是,与ZIP 2.0兼容的“密码”已被严重破坏,除防止幼儿查看您的文件外,不应将其用于其他任何用途。
克里斯托弗·舒尔茨

3

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

可以在以下位置找到TrueZip的后续产品:https ://christian-schlichtherle.bitbucket.io/truevfs/


1
我希望我能早点看到这个,Zip4j很好,但这更好。特别是它可以处理更广泛的输入,例如自解压和嵌套的zip文件以及数学运算等,并且不会被放弃。
百里香

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();

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

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


1

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

  1. 您是否需要使用可以处理zip密码的标准Zip工具打开zip?
  2. 与上一个问题相同,您是否要将这个zip传递给必须打开zip的外部实体?
  3. 它仅是内部的,您只想保护zip的内容吗?

对于3,您可以仅使用Java将zip的流内容加密为普通文件,可能最好将文件扩展名更改为.ezip或类似的文件。

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


Chillkat不是“免费”的,而是试用软件。
詹姆斯·谢克

1

其他信息:我在Google上搜索了更多,的确,这是一个非常普遍的问题,而且似乎没有免费的解决方案(还好吗?)。

现在,已经很好地定义了Zip加密的标准算法:有关.ZIP文件格式的信息,请参阅PKWARE的应用笔记。它似乎是对加密流进行的加密。如果有人想编码...

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


我大约在5年前为我们的一个应用做了此操作。这花了点力气(不幸的是,我无法为此发布代码)-但是很高兴知道它可以做到。实际上,我们实施了WinZip推广的AES强加密系统。
凯文·戴

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.