java文件加密压缩及解密-流程图及源码.doc

上传人:scccc 文档编号:11175975 上传时间:2021-07-09 格式:DOC 页数:24 大小:241.92KB
返回 下载 相关 举报
java文件加密压缩及解密-流程图及源码.doc_第1页
第1页 / 共24页
java文件加密压缩及解密-流程图及源码.doc_第2页
第2页 / 共24页
java文件加密压缩及解密-流程图及源码.doc_第3页
第3页 / 共24页
java文件加密压缩及解密-流程图及源码.doc_第4页
第4页 / 共24页
java文件加密压缩及解密-流程图及源码.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《java文件加密压缩及解密-流程图及源码.doc》由会员分享,可在线阅读,更多相关《java文件加密压缩及解密-流程图及源码.doc(24页珍藏版)》请在三一文库上搜索。

1、文件加密压缩以及解密两种方式:1. 文件内容加密:首先对文件内容进行加密,然后压缩;对应的先解压,再对文件进行密匙匹配,匹配成功对文件解密2. ZIP4J:引入jar包,给文件添加密匙进行压缩,必须输入密码才可以打开文件。通过密码将文件进行解压缩。1.1文件内容加密流程图流程图对应的具体方法序号对应方法名相关参数01Main函数调用入口public void compressExe(String srcPathName,String destPathName,String key)srcPathName:源文件路径destPathName:目标文件路径key:密匙02判断压缩目标是“目录(文件

2、夹)”、“文件”private void compressByType(String srcPathName,ZipOutputStream out,String basedir,String key)srcPathName:要被操作的文件路径out:压缩文件流key:密匙03文件加密 private void compressFile(String srcPathName, ZipOutputStream out, String basedir,String key)代码前面部分srcPathName:要被操作的文件路径out:压缩文件流key:密匙04添加密匙public static v

3、oid appendLock(String fileName,String key)fileName:文件路径key:密匙05压缩文件private void compressFile(String srcPathName, ZipOutputStream out, String basedir,String key)代码在后面部分srcPathName:要被操作的文件路径out:压缩文件流key:密匙1.2文件加密方法:1.3文件压缩1.4文件解压整体流程图:序号对应方法名相关参数01Main函数调用入口,首先解压文件public static void unZipFiles(String

4、zipFile,String descDir,String key)zipFile:源zip路径descDir:文件输出路径key:密匙02匹配密匙public static boolean matchLock(String fileName,String key)fileName:文件路径key:密匙03文件解密 public static String decrypt(String srcPathName, String key)srcPathName:要被操作的文件路径key:密匙具体解压流程图如下:1.5文件解密decrypt(decryptFilePath,key);附源代码:imp

5、ort com.zl.base.core.MethodFactory;import com.zl.base.core.db.Executer;import com.zl.base.exception.DbException;import mon.CoreDispatchAction;import mon.MD5;import mons.beanutils.BasicDynaBean;import mons.beanutils.DynaProperty;import org.apache.log4j.Logger;import org.apache.struts.action.ActionFor

6、m;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.

7、IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.RandomAccessFile;import java.util.List;import java.util.zip.CRC32;import java.util.zip.CheckedOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import java.util.zip.ZipInputStream;/*import

8、 com.zl.opt.schedule.zip4j.*;import com.zl.opt.schedule.zip4j.model.*;import com.zl.opt.schedule.zip4j.util.Zip4jConstants;/import com.zl.opt.schedule.zip4j.core.ZipFile;import com.zl.opt.schedule.zip4j.exception.ZipException;*/import javax.servlet.http.HttpServletRequest;import javax.servlet.http.H

9、ttpServletResponse;public class zipCompressor extends CoreDispatchAction static Logger logger = Logger.getLogger(zipCompressor.class.getName();static final int BUFFER = 8192;public zipCompressor()public ActionForward createfile(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpS

10、ervletResponse response)String filepath=e:;/usrlocalhnpierce;String sql=select id,title,systemcode,file_passwd,sqlrule,isappoint,separator,int(current date) as datecol from S_DATAOFFERRULE where starttime = current date;try List list1 = Executer.getInstance().ExecSeletSQL(sql).getResultSet();if(list

11、1.size()0)BasicDynaBean rowBean = null;String info=,separator=;for(int i=0;i0)File filesave = new File(filepath+rowBean.get(systemcode)+/+rowBean.get(title)+rowBean.get(datecol)+000+i+.txt);for(int j=0;jlist2.size();j+)BasicDynaBean rowBeandata = (BasicDynaBean) list2.get(j); DynaProperty str=rowBea

12、ndata.getDynaClass().getDynaProperties();/str7.getName()for(int k=0;kstr.length;k+)if(k=str.length-1)info+=rowBeandata.get(strk.getName()+n;elseinfo+=rowBeandata.get(strk.getName()+separator;/info=rowBeandata.get(v_province)+separator+rowBeandata.get(org_code)+separator/+rowBeandata.get(sale_reg_cod

13、e)+separator+rowBeandata.get(yearmonth)+separator/+rowBeandata.get(yearweek)+separator+rowBeandata.get(cust_code)+separator/+rowBeandata.get(brand_code)+separator+rowBeandata.get(demand)+separator/+rowBeandata.get(order)+separator+rowBeandata.get(money)+n;OutputStream bos = null;try bos = new FileOu

14、tputStream(filesave);bos.write(info.getBytes();bos.close(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();compressExe(filepath+rowBean.get(systemcode)+rowBean.get(title)+rowBean.get(datecol)+000+i+.txt,filepath+rowBean.get(title)+rowBean.get(datecol)+000+i+.zip,rowBean.get

15、(file_passwd)+);Executer.getInstance().ExecUpdateSQL(insert into S_filenameOperate(systemcode,usecode,usename,filename,address,status,recordcount)+ values(+rowBean.get(systemcode)+,+rowBean.get(id)+,+rowBean.get(title)+,+rowBean.get(title)+rowBean.get(datecol)+000+i+.zip+,+rowBean.get(systemcode)+,1

16、,+list2.size()+); catch (DbException e) / TODO Auto-generated catch blocke.printStackTrace();return null;/*执行压缩操作 * * param srcPathName 要被压缩的文件 * param destPathName 压缩包 * param key 密匙 */public void compressExe(String srcPathName,String destPathName,String key)File file = new File(srcPathName);File z

17、ipFile = new File(destPathName);if (!file.exists() throw new RuntimeException(srcPathName+不存在!);try FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32();ZipOutputStream out = new ZipOutputStream(cos); /打包Str

18、ing basedir = ;/compressByType(file, out, basedir);/根据(文件夹/文件)来执行不同压缩方法compressByType(srcPathName, out, basedir,key);/根据(文件夹/文件)来执行不同压缩方法out.close(); catch (Exception e) / TODO: handle exceptione.printStackTrace();logger.error(执行压缩操作时发生异常+e);throw new RuntimeException(e);/* * 判断压缩目标是“目录(文件夹)”、“文件” *

19、 param file * param out * param basedir */private void compressByType(String srcPathName,ZipOutputStream out,String basedir,String key)File file = new File(srcPathName);if(file.isDirectory()/目录logger.info(压缩+basedir+file.getName();pressDirectory(file, out, basedir,key);elselogger.info(压缩+basedir+fil

20、e.getName();pressFile(srcPathName, out, basedir,key);/* * 压缩目录 * param dir * param out * param basedir */private void compressDirectory(File dir, ZipOutputStream out, String basedir,String key) if(!dir.exists()return;File files = dir.listFiles();for(int i = 0; i0)for(int i = 0;i b.length + 20 - 1; i

21、-) randomFile.seek(i - b.length); byte temp = randomFile.readByte(); randomFile.seek(i); randomFile.writeByte(temp); randomFile.seek(20); randomFile.write(b);randomFile.close();catch(IOException e)e.printStackTrace();/* * 解压文件到指定目录 * param zipFile 源zip路径 * param descDir 输出路径 * author */ public stati

22、c void unZipFiles(String zipFile,String descDir,String key)throws IOException long startTime=System.currentTimeMillis(); try ZipInputStream Zin=new ZipInputStream(new FileInputStream(zipFile); /输入源zip路径 BufferedInputStream Bin=new BufferedInputStream(Zin); String Parent=descDir;/输出路径(文件夹目录) File Fou

23、t=null; ZipEntry entry; try while(entry = Zin.getNextEntry()!=null & !entry.isDirectory() Fout=new File(Parent,entry.getName(); if(!Fout.exists() (new File(Fout.getParent().mkdirs(); FileOutputStream out=new FileOutputStream(Fout); BufferedOutputStream Bout=new BufferedOutputStream(out); int b; whil

24、e(b=Bin.read()!=-1) Bout.write(b); Bout.close(); out.close(); System.out.println(Fout+解压成功); try String decryptFilePath = Fout.getPath().replace(, /);decrypt(decryptFilePath,key); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); Bin.close(); Zin.close(); catch (IOException e

25、) / TODO Auto-generated catch block e.printStackTrace(); catch (FileNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); long endTime=System.currentTimeMillis(); System.out.println(耗费时间: +(endTime-startTime)+ ms); /* * 解密 * param srcPathName 源文件 * param tempUrl 临时文件 * param ke

26、tLength 密码长度 * return * throws Exception */ public static String decrypt(String srcPathName, String key) throws Exception /将解密秘钥进行md5加密 String md5pass=new MD5().encrypt(key); System.out.println(md5pass); if(matchLock(srcPathName, md5pass)/ /匹配成功开始解密 File file = new File(srcPathName); if (!file.exist

27、s() return null; int keyLength = md5pass.length(); int index = srcPathName.lastIndexOf(/); String destFile = srcPathName.substring(0, index)+/+abc; File dest = new File(destFile); if (!dest.getParentFile().exists() dest.getParentFile().mkdirs(); InputStream is = new FileInputStream(srcPathName); OutputStream out = new FileOutputStream(destFile); byte buffer = new byte1024; byte buffer2=new byte1024; byte buffer3=new byte1024; byte buffer4=new byte1024-keyLength; byte bMax=(byte)255; long size = file.length() ;/- keyLength;/ int avgLength = keyLength/3; int mod

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1