【问题标题】:Semi password protected Zip files in JavaJava 中的半密码保护 Zip 文件
【发布时间】:2018-03-22 11:23:44
【问题描述】:

我需要使用 Java 创建一个 zip 文件。库并不重要,但 zip4j 似乎是一个不错的库。在这个 zip 文件中,只有部分文件或子目录会受到密码保护。例如,在下面的 zip 文件中,只有以“*”开头的文件会受到密码保护:

foo.zip
 foo1.txt
 *secure
  *secure1.txt
  *secure2.txt

有没有办法在 Java 中实现这个场景?

提前谢谢...

【问题讨论】:

    标签: java zip zip4j


    【解决方案1】:

    这个mavne依赖:

            <dependency>
                <groupId>net.lingala.zip4j</groupId>
                <artifactId>zip4j</artifactId>
                <version>2.6.1</version>
            </dependency>    
    
    
    

    代码:

                ZipParameters parameters = new ZipParameters();
                parameters.setEncryptFiles(true);
                parameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD);
                ZipFile zip = new ZipFile(destFile, PASSWORD.toCharArray());
                zip.setCharset(InternalZipConstants.CHARSET_UTF_8);
    
                for (File file : srcFiles) {
                    if (file.isFile()) {
                        zip.addFile(file, parameters);
                    } else {
                        zip.addFolder(file, parameters);
                    }
                }
    

    【讨论】:

      【解决方案2】:

      无论如何,我是通过使用 zip4j 找到的。以下 sn-ps 可用于创建受密码保护和不受密码保护的文件。

      对于要受密码保护的文件:

              ZipFile zipFile = new ZipFile(zipFileName);
      
              ZipParameters zipParameters = new ZipParameters();
              zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
              zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
              zipParameters.setEncryptFiles(true);
              zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
              zipParameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
              zipParameters.setPassword(password);
      
              zipFile.addFiles(new ArrayList<>(filesToZip), zipParameters);
      

      以及没有密码保护的文件:

              ZipFile zipFile = new ZipFile(zipFileName);
      
              ZipParameters zipParameters = new ZipParameters();
              zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
              zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
      
              zipFile.addFiles(new ArrayList<>(filesToZip), zipParameters);
      

      【讨论】: