Java中的半密码保护Zip文件

时间:2018-03-22 11:23:44

标签: java zip zip4j

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

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

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

提前致谢...

2 个答案:

答案 0 :(得分:1)

这种严重依赖:

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

答案 1 :(得分:0)

无论如何,我通过使用zip4j找到了它。 Fwollowing snippets可用于创建受密码保护和非密码保护的文件。

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

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