使用java生成加密的ZIP文件

    JDK操作zip文件的API已能很好的满足正常的压缩及解压缩操作,但对于生成加密ZIP文件这种情况尚未有官方的解决办法,故而得求助于第三方的组件来实现这一功能。在java领域能实现加密zip文件的第三方组件很多,但其中的很多都需要借助于本地代码实现加解密功能。推荐一款纯java实现的操作zip的开源组件:zip4j 

    zip4j提供了很多功能,支持有以下一些功能:

  • Create, Add, Extract, Update, Remove files from a Zip file

  • Read/Write password protected Zip files

  • Supports AES 128/256 Encryption

  • Supports Standard Zip Encryption

  • Supports Zip64 format

  • Supports Store (No Compression) and Deflate compression method

  • Create or extract files from Split Zip files (Ex: z01, z02,…zip)

  • Supports Unicode file names

  • Progress Monitor

    如果有需要,可能在自已的项目中引入这一组件。目前zip4j的最新版本是1.3.2,可以在maven中央仓库中下载到:

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

    添加zip4j依赖后,就可以在项目中正常使用zip4j的相关功能了,如下所示:

import java.io.File;
import java.util.ArrayList;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
public class CreatePasswordProtectedZipExample {
    public static void main(String[] args) {
        try {
            // This is name and path of zip file to be created
            ZipFile zipFile = new ZipFile("C:/temp/test.zip");
            String passWd = "password";
            // 创建加密的ZIP文件
            createZipFile(zipFile, passWd);
            // 解压创建的ZIP文件
            unzip(zipFile, passWd);
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }
    private static void unzip(ZipFile zipFile, String passWd)
        throws ZipException {
        zipFile.setPassword(passWd);
        zipFile.extractAll("C:/temp/test");
    }
    private static void createZipFile(ZipFile zipFile, String passWd)
        throws ZipException {
        // Add files to be archived into zip file
        ArrayList<File> filesToAdd = new ArrayList<File>();
        filesToAdd.add(new File("C:/temp/test1.txt"));
        filesToAdd.add(new File("C:/temp/test2.txt"));
        filesToAdd.add(new File("C:/temp/test3.txt"));
        // Initiate Zip Parameters which define various properties
        ZipParameters parameters = new ZipParameters();
        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); 
        // DEFLATE_LEVEL_FASTEST - Lowest compression level but higher speed
        // of compression
        // DEFLATE_LEVEL_FAST - Low compression level but higher speed of
        // compression
        // DEFLATE_LEVEL_NORMAL - Optimal balance between compression
        // level/speed
        // DEFLATE_LEVEL_MAXIMUM - High compression level with a compromise
        // of speed
        // DEFLATE_LEVEL_ULTRA - Highest compression level but low speed
        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        // Set the encryption flag to true
        parameters.setEncryptFiles(true);
        // Set the encryption method to AES Zip Encryption
        parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
        // AES_STRENGTH_128 - For both encryption and decryption
        // AES_STRENGTH_192 - For decryption only
        // AES_STRENGTH_256 - For both encryption and decryption
        // Key strength 192 cannot be used for encryption. But if a zip file
        // already has a
        // file encrypted with key strength of 192, then Zip4j can decrypt
        // this file
        parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
        // Set password
        parameters.setPassword(passWd);
        // Now add files to the zip file
        zipFile.addFiles(filesToAdd, parameters);
    }
}

    

  via: http://howtodoinjava.com/2015/06/25/how-to-create-password-protected-zip-files-in-java/