【问题标题】:Recommendations on a free library to be used for zipping files [closed]关于用于压缩文件的免费库的建议[关闭]
【发布时间】:2010-09-15 01:05:42
【问题描述】:

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

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

【问题讨论】:

  • 如此有用的问题是如何解决的?
  • 因为 Meta 认为可能会稍微变成意见问题的有用问题不适合 StackOverflow。这很可悲,但确实如此。
  • Zip4j 支持文件列表的加密:stackoverflow.com/questions/15085249/…

标签: java encryption zip


【解决方案1】:

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 code 的原始主页导出)。它对我有用(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 查看 AesFileEncrypter 的源代码:您所要做的就是创建该类的一个实例,然后添加您想要的任何内容。
  • winzipaes 可通过 Maven repo mvnrepository.com/artifact/de.idyl/winzipaes
【解决方案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)解压缩“/tmp/foo.zip”,并使用密码“my-password”。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我希望我早点看到这个,Zip4j 很好,但这个更好。特别是它可以处理更广泛的输入,例如自解压和嵌套 zip 文件以及其他数学运算,并且不会被放弃。
    • 现在阅读本文的人的更新:Zip4j 开发已于 2021 年年中再次启动。
    【解决方案4】:

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

    主要特点:

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

    许可证:

    【讨论】:

    • 它也可以完美地与 Android 配合使用 :) 很棒的库,有很好的例子 +1!
    • 看来 Zip4j 已被废弃 :-/
    • 仍然有效。
    • @PatrickCornelissen 它被废弃了好几年,但自 2019 年年中再次得到支持
    【解决方案5】:

    7-Zip 可以在命令行模式下添加密码。也许你可以执行它来得到这个结果(它也有很好的压缩比)。

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

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

    【讨论】:

    • 7-zip 有库可以在我相信的自写程序中使用,所以它不必是一个外部进程。
    • @Quagmire 7-zip 没有原生 Java 构建(LZMA 算法除外),因此使用 7z 处理 ZIP 文件需要外部进程。
    • @ChristopherSchultz 确实如此。我想人们也可以编写一个 JNI 或 JNA 包装器,以减少麻烦。
    • 还值得指出的是,与 ZIP 2.0 兼容的“密码”已严重损坏,除了防止幼儿查看您的文件外,不应用于任何其他用途。
    【解决方案6】:

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

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

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

    如果您对 zip 文件进行任何类型的加密,请务必使用其中一种强加密标准(我相信 WinZip 的 128 位和 256 位 AES 标准得到最好的支持)。这是technical specs - 我们在开发自己的 Java 加密 zip 系统时使用了它(无法提供源代码 - 抱歉 - 仅供内部使用)

    唯一比没有加密更糟糕的是认为你有加密并且错了:-)

    【讨论】:

    • 您可能希望同时支持这两者。 AES 加密的 zip 文件是 aFAIK,Windows Explorer 尚不支持,而 PKZIP 加密的 zip 文件则支持。您可以查看任一类型的加密 zip 文件的条目,但您只能使用 Windows 资源管理器从 PKZIP 加密(弱加密)的 zip 文件中提取。您将需要 WinZip 或 Windows 上的其他合适工具来打开 AES 加密的 zip。 (免费的 DotNetZip 附带了这样一个工具)。
    • Windows XP SP3 和 Vista 都支持 AES zip 文件。我的观点(任何人都可以不同意)是支持甚至远程安全的东西是一个坏主意。不支持安全格式的 M$ 不是实现不安全内容的正当理由。
    • Winzipaes 创建的(见上文).zip 文件无法在我的最新 Windows XP 映像上打开,Windows 抱怨不支持的压缩方案。但是,它们确实可以使用 7z 正常打开。
    【解决方案7】:

    附加信息:我在 google 上搜索了一下,确实,这是一个很常见的问题,而且似乎没有免费的解决方案(还没有?)。

    现在,Zip 加密的标准算法已经很好地定义了:请参阅 PKWARE 的 Application Note 了解 .ZIP 文件格式。它似乎是对加密流进行的加密。如果有人喜欢编写代码...

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

    【讨论】:

    • 大约 5 年前,我为我们的一款应用程序就这样做了。这需要一些努力(不幸的是,我不能为它发布代码) - 但很高兴知道它可以完成。我们实际上实现了 WinZip 推广的 AES 强加密系统。
    【解决方案8】:

    如果您给出更好的使用场景,那么还有其他选择。

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

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

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

    【讨论】:

    • Chillkat 不是“免费”的,它是试用软件。
    【解决方案9】:

    有没有一个好的(免费)库?

    java.util.zip 将执行压缩,但不会执行密码。不,我不知道有什么免费的。 The cheapest 我见过一个开发者席位是 150 美元。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 2010-10-01
      • 1970-01-01
      • 2020-12-11
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多