Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于用于压缩文件的免费库的建议_Java_Encryption_Zip - Fatal编程技术网

Java 关于用于压缩文件的免费库的建议

Java 关于用于压缩文件的免费库的建议,java,encryption,zip,Java,Encryption,Zip,我需要压缩和密码保护一个文件。这里有好的(免费的)图书馆吗 这需要由第三方打开,因此密码保护需要使用标准工具 这里有好的(免费的)图书馆吗 java.util.zip将执行压缩,但不会执行密码。不,我不知道会有什么免费的。我看到一个开发者席位是150美元。7-Zip可以选择在命令行模式下添加密码。也许您可以执行它来获得这个结果(而且它也有很好的压缩比) 缺点:外部进程,难以实现可移植性(即使7-Zip本身是可移植的),无法确定分发许可证 请注意,InfoZip的Zip实用程序也具有很高的可移植性

我需要压缩和密码保护一个文件。这里有好的(免费的)图书馆吗

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

这里有好的(免费的)图书馆吗


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

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

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


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

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

  • 您是否需要使用能够处理zip密码的标准zip工具打开zip
  • 与前面的问题相同,您是否要将此zip传递给必须打开zip的外部实体
  • 它只是内部的,你只是想保护拉链的内容吗
  • 对于3,您可以使用java将zip的流内容作为普通文件进行加密,最好将文件扩展名更改为.ezip或类似文件

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

    其他信息:我在谷歌上搜索了更多信息,事实上,这是一个非常常见的问题,而且似乎还没有免费的解决方案(还?)

    现在,Zip加密的标准算法已经定义得很好:请参见PKWARE关于.Zip文件格式的介绍。这似乎是对加密流进行的加密。如果有人想编码它


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

    这不是一个答案,但在评估潜在解决方案时要注意这一点

    关于zip加密,有一点非常重要:

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

    如果您正在对zip文件进行任何类型的加密,请确保使用一种强加密标准(我相信WinZip的128位和256位AES标准是最受支持的)。以下是-我们在开发自己的Java加密zip系统时使用了此选项(无法提供源代码-抱歉-仅限内部使用)


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

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


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

    一组免费提供的源代码,适用于单个文件压缩。但是,没有许可证。用法是AesZipOutputStream.zipAndEcrypt(…)。 ()

    更新:此代码现在已在获得Apache许可并在发布(从原始主页导出)。它对我很有用(zip中只有一个文件),很好地填补了Java开源库中的一个漏洞

    商业产品(撰写本文时为500美元)。我无法验证这是否有效,因为他们的试用许可方法很复杂。它也是一个移植的.NET应用程序:

    商业产品(撰写本文时为290美元)。仅适用于Wnidows,因为它使用dll:
    您也可以尝试TrueZip。有关功能,请参见以下链接:

    TrueZip的继任者可在以下位置找到:

    您可以尝试使用纯java库来处理zip文件。它支持PKWare的加密/解密和AES加密方法

    主要特点:

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

    • Zip4j是在以下条件下发布的

      • 下面是一个使用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”,使用密码“我的密码”


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

        大约5年前,我为我们的一个应用程序做了这件事。这需要一些努力(不幸的是,我不能为它发布代码)——但知道它是可以做到的很好。我们实际上实现了WinZip推出的AES强加密系统。Chillkat不是“免费”的,它是试用软件。您可能希望同时支持这两种软件。AES加密的zip文件是,aFAIK,Windows资源管理器尚不支持,而PKZIP加密的zip文件是。您可以查看任一类型的加密zip文件的条目,但只能使用Windows资源管理器从PKZIP加密(弱加密)zipfile中提取。您需要在Windows上使用WinZip或其他合适的工具来打开AES加密的ZIP。(免费的DotNetZip附带了这样一个工具)。WindowsXPSP3和Vista都支持AES压缩文件。我的观点(任何人都可以随意反对)是,支持一个甚至连一点都不安全的东西是个坏主意。M$不支持安全格式不是实施不安全内容的有效原因。Winzipaes-created(见上文)。zip文件不会在我最新的Windows XP映像上打开。此处,Windows抱怨不支持的压缩方案。然而,它们确实是开放的