求解 java 对压缩文件zip 加密 !
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解 java 对压缩文件zip 加密 !相关的知识,希望对你有一定的参考价值。
所谓多zip加密,实际上就是一种对zip字节流的一种对称加密~其中解密的密码,就是对称加密中的密钥加密后的字节保存为一个.zip的文件,打开之前必须输入密码(密钥),通过密钥将文件的字节转换成为普通的zip字节,就能读取出来了~
最好是写一个加密的输入输出流,将zip的输入输出流包装一下 参考技术A 在读写流中,对数据进行处理,这样加密别的zip工具就打不开了。 参考技术B 你要什么加密效果?是只有你自己的程序能解密?还是winzip之类的通用程序能通过密码解密?
使用JAVA解压加密的中文ZIP压缩包
近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下。
该压缩包的特性:
- 使用标准的zip压缩格式(压缩算法没有深入探究)
- 压缩包中带有目录并且目录名称是中文
- 压缩时加了密码
因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包。
下面是解压的实现代码:
1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */ 7 public void getEntryNames(String zipFilePath, String password){ 8 List<String> entryList = new ArrayList<String>(); 9 ZipFile zf; 10 try { 11 zf = new ZipFile(zipFilePath); 12 zf.setFileNameCharset("gbk");//默认UTF8,如果压缩包中的文件名是GBK会出现乱码 13 if(zf.isEncrypted()){ 14 zf.setPassword(password);//设置压缩密码 15 } 16 for(Object obj : zf.getFileHeaders()){ 17 FileHeader fileHeader = (FileHeader)obj; 18 String fileName = fileHeader.getFileName();//文件名会带上层级目录信息 19 entryList.add(fileName); 20 } 21 } catch (ZipException e) { 22 e.printStackTrace(); 23 } 24 return entryList; 25 } 26 27 /* 28 将ZIP包中的文件解压到指定目录 29 */ 30 public void extract(String zipFilePath, String password, String destDir){ 31 InputStream is = null; 32 OutputStream os = null; 33 ZipFile zf; 34 try { 35 zf = new ZipFile(zipFile); 36 zf.setFileNameCharset("gbk"); 37 if(zf.isEncrypted()){ 38 zf.setPassword(PASSWORD); 39 } 40 41 for(Object obj : zf.getFileHeaders()){ 42 FileHeader fileHeader = (FileHeader)obj; 43 String destFile = destDir + "/" + fileHeader.getFileName(); 44 if(!destFile.getParentFile().exists()){ 45 destFile.getParentFile().mkdirs();//创建目录 46 } 47 is = zf.getInputStream(fileHeader); 48 os = new FileOutputStream(destFile); 49 int readLen = -1; 50 byte[] buff = new byte[BUFF_SIZE]; 51 while ((readLen = is.read(buff)) != -1) { 52 os.write(buff, 0, readLen); 53 } 54 } 55 }catch(Exception e){ 56 e.printStackTrace(); 57 }finally{ 58 //关闭资源 59 try{ 60 if(is != null){ 61 is.close(); 62 } 63 }catch(IOException ioe){} 64 65 try{ 66 if(os != null){ 67 os.close(); 68 } 69 }catch(IOException ioe){} 70 } 71 } 72 }
以上代码未经测试,仅作为伪代码参考
以上是关于求解 java 对压缩文件zip 加密 !的主要内容,如果未能解决你的问题,请参考以下文章
java工具类 文件zip压缩 base64 加密,base64解密 zip解压
zip4j 2.x使用,Java实现文件压缩与解压,加密压缩,ZipParameters ZipFile使用