java压缩文件并对压缩包进行加密

     由于最近有个需求:从数据库抽取数据压缩加密后工供用户下载,压缩包密码以短信形式发送给用户。

     压缩还好,jdk本身的java.util.zip包就可以搞定,但是没有提供对压缩包加密的方法。几经查询终于找到个第三方工具包zip4j_1.3.1.zip轻轻松松就可以搞定压缩加密等一系列问题。现将该工具包分享出来。

     下面是自己写的一个简单的压缩加密的例子:

 

  public static void main(String[] args) { 
    	String sss="五千年的风和雨啊创了多少梦\r\nahhwdpjfwjfpwjpf\r\n19eu923ur932ur03";
    	String passwd="111#";
        ZipParameters parameters = new ZipParameters();  
        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);           // 压缩方式  
        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);    // 压缩级别  
        parameters.setSourceExternalStream(true);
        parameters.setFileNameInZip("aaaa.txt");
        if (!"".equals(passwd)) {  
            parameters.setEncryptFiles(true);  
            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式  
            parameters.setPassword(passwd.toCharArray());  
        }
        try {  
            ZipFile zipFile = new ZipFile("D:\\java压缩文件.zip");   
            zipFile.addStream(new ByteArrayInputStream(sss.getBytes()), parameters);
        } catch (ZipException e) {  
            e.printStackTrace();  
        }  
    }  





Java中,我们可以使用多种库来对压缩包进行加密和解密操作,常见的有Zip和JCE(Java Cryptography Extension)API。以下是基本步骤: 1. 加密压缩包: - 使用`java.util.zip`包中的`ZipOutputStream`和`DeflaterOutputStream`组合,先创建一个压缩流,然后可以使用`javax.crypto.Cipher`类对压缩后的数据进行加密。例如,你可以将数据写入压缩流,然后使用一个密钥和模式(如AES或DES)进行加密。 ```java import java.io.*; import java.util.zip.*; import javax.crypto.*; public void encryptZip(String inputFile, String outputFile, String password) { try (FileInputStream fis = new FileInputStream(inputFile); FileOutputStream fos = new FileOutputStream(outputFile); ZipOutputStream zos = new ZipOutputStream(fos); Cipher cipher = Cipher.getInstance("AES")) { // 创建加盐的IvGenerator IvParameterSpec iv = new IvParameterSpec(password.getBytes(StandardCharsets.UTF_8)); SecretKeySpec keySpec = new SecretKeySpec(password.getBytes(), "AES"); // 初始化Cipher对象为ENCRYPT_MODE cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); // 开始加密 byte[] buffer = new byte[1024]; int read; while ((read = fis.read(buffer)) != -1) { byte[] encryptedBuffer = cipher.doFinal(buffer, 0, read); zos.write(encryptedBuffer, 0, encryptedBuffer.length); } // 添加加密文件到压缩包 ZipEntry entry = new ZipEntry(inputFile.getName()); zos.putNextEntry(entry); zos.closeEntry(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } ``` 2. 解密压缩包: - 首先读取加密的数据,然后使用相同的密钥和IV解密。解密之后再使用`ZipInputStream`处理解压操作。 ```java public void decryptZip(String encryptedFile, String decryptedOutputDir, String password) { try (FileInputStream fis = new FileInputStream(encryptedFile); FileOutputStream fos = new FileOutputStream(decryptedOutputDir + "/" + encryptedFile.substring(encryptedFile.lastIndexOf(".") + 1))); ZipInputStream zis = new ZipInputStream(new CipherInputStream(fis, Cipher.getInstance("AES"), password)); Deflater decompressor = new Deflater()) { // 初始化解密过程 ... // 解压并写入文件 ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { byte[] buffer = new byte[1024]; int length; decompressor.setInput(buffer); while ((length = zis.read(buffer)) > 0) { fos.write(decompressor.inflate(buffer, 0, length)); } zis.closeEntry(); } } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值