您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > java文件加密压缩及解密-流程图及源码
文件加密压缩以及解密两种方式:1.文件内容加密:首先对文件内容进行加密,然后压缩;对应的先解压,再对文件进行密匙匹配,匹配成功对文件解密2.ZIP4J:引入jar包,给文件添加密匙进行压缩,必须输入密码才可以打开文件。通过密码将文件进行解压缩。1.1文件内容加密流程图流程图对应的具体方法序号对应方法名相关参数01Main函数调用入口publicvoidcompressExe(StringsrcPathName,StringdestPathName,Stringkey)srcPathName:源文件路径destPathName:目标文件路径key:密匙02判断压缩目标是“目录(文件夹)”、“文件”privatevoidcompressByType(StringsrcPathName,ZipOutputStreamout,Stringbasedir,Stringkey)srcPathName:要被操作的文件路径out:压缩文件流key:密匙03文件加密privatevoidcompressFile(StringsrcPathName,ZipOutputStreamout,Stringbasedir,Stringkey)代码前面部分srcPathName:要被操作的文件路径out:压缩文件流key:密匙01.初始化srcPathName:源文件,destPathName:目的文件,key:密匙02.根据(文件夹/文件)来执行不同压缩方法以流的形式打开目的文件ZipOutputStreamoutYN03.对文件加密04.给文件添加密匙结束取出目录下的文件,再次进行类型判断05.压缩文件04添加密匙publicstaticvoidappendLock(StringfileName,Stringkey)fileName:文件路径key:密匙05压缩文件privatevoidcompressFile(StringsrcPathName,ZipOutputStreamout,Stringbasedir,Stringkey)代码在后面部分srcPathName:要被操作的文件路径out:压缩文件流key:密匙1.2文件加密方法:创建一个新的添加文件destFile,存放加密后的文件创建长度为1024的内存空间buffer,存放读取字节Buffer2,存放加密后的字节//循环得到buffer[i],将字节位移加密,存放在buffer2中For(inti=0;ir;i++){Buffer[2]=Buffer[i]==255?0:++b}将buffer2,写入destFile中Fileout.write(buffer2,0,r)添加密匙key加入md5格式的key,将key分为3段,分为写入加密文件的startcenterlast位置While((r=in.read(buffer))0)读字节到数组buffer中,r读入的字节数YN加密成功1.3文件压缩1.4文件解压整体流程图:读取压缩文件流BufferedInputStreambis=newBufferedInputStream(newFileInputStream(newFile(srcPathName)));创建压缩包入口,并放入目标流outZipEntryentry=newZipEntry(basedir+newFile(srcPathName).getName())out.putNextEntry(entry);将data,写入out中out.write(data,0,count);out.flush();bis文件流关闭While((count=bis.read(data,0,BUFFER))!=-1)读字节到数组buffer中,r读入的字节数YN压缩完成创建长度为BUFFER的内存空间data,存放读取字节bytedata[]=newbyte[BUFFER];序号对应方法名相关参数01Main函数调用入口,首先解压文件publicstaticvoidunZipFiles(StringzipFile,StringdescDir,Stringkey)zipFile:源zip路径descDir:文件输出路径key:密匙02匹配密匙publicstaticbooleanmatchLock(StringfileName,Stringkey)fileName:文件路径key:密匙03文件解密publicstaticStringdecrypt(StringsrcPathName,Stringkey)srcPathName:要被操作的文件路径key:密匙具体解压流程图如下:01.解压文件密匙匹配成功02.对解压后的文件进行密匙匹配NY03.对文件解密结束密匙错误01.初始化压缩写文件流ZipInputStreamZin=newZipInputStream(newFileInputStream(zipFile));zipFile:待解压zip路径读压缩文件流outBufferedInputStreamBin=newBufferedInputStream(Zin);将Bin.read()写入输出地址流中Bout.write(b);Bout、out关闭While((entry=Zin.getNextEntry())!=null&&!entry.isDirectory())压缩文件流入口不为空时YN压缩完成初始化目标地址文件。FileFout=newFile(“输出文件地址”,entry.getName());创建输出地址文件流。FileOutputStreamout=newFileOutputStream(Fout);BufferedOutputStreamBout=newBufferedOutputStream(out)while((b=Bin.read())!=-1)读压缩文件流对解压的文件进行解密decrypt(decryptFilePath,key);YNBin.close();Zin.close();1.5文件解密decrypt(decryptFilePath,key);创建一个新的添加文件destFile,存放解密后的文件创建长度为1024的内存空间buffer,存放读取字节Buffer2,存放解密后的字节//循环得到buffer[i],将字节位移加密,存放在buffer2中For(inti=0;ir;i++){buffer2[i]=buffer[i]==0?255:--buffer[i];}将buffer2,写入destFile中out.write(buffer2,0,r);k++While((k=count&&(r=is.read(buffer))0))读字节到数组buffer中,r读入的字节数YN解密成功先匹配密匙是否正确matchLock(StringfileName,Stringkey)读出文件fileName中start、center、last位置(key.length()/3)字节,拼接出来与key匹配N//初始化文件字节总数intmod=(int)((file.length()-keyLength)%1024);intdiv=(int)(size10);//右移10位intcount=mod==0?div:(div+1);If(mod!=0&&k==count)r=mod;结束YYN关闭所有文件流附源代码:importcom.zl.base.core.MethodFactory;importcom.zl.base.core.db.Executer;importcom.zl.base.exception.DbException;importcom.zl.common.CoreDispatchAction;importcom.zl.common.MD5;importorg.apache.commons.beanutils.BasicDynaBean;importorg.apache.commons.beanutils.DynaProperty;importorg.apache.log4j.Logger;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.RandomAccessFile;importjava.util.List;importjava.util.zip.CRC32;importjava.util.zip.CheckedOutputStream;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;importjava.util.zip.ZipInputStream;/*importcom.zl.opt.schedule.zip4j.*;importcom.zl.opt.schedule.zip4j.model.*;importcom.zl.opt.schedule.zip4j.util.Zip4jConstants;//importcom.zl.opt.schedule.zip4j.core.ZipFile;importcom.zl.opt.schedule.zip4j.exception.ZipException;*/importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclasszipCompressorextendsCoreDispatchAction{staticLoggerlogger=Logger.getLogger(zipCompressor.class.getName());staticfinalintBUFFER=8192;publiczipCompressor(){}publicActionForwardcreatefile(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){Stringfilepath=e:\\;//\\usr\\local\\hnpierce\\;Stringsql=selectid,title,systemcode,file_passwd,sqlrule,isappoint,separator,int(currentdate)asdatecolfromS_DATAOFFERRULEwherestarttime=currentdateandendtime=currentdate;try{Listlist1=Executer.getInstance().ExecSeletSQL(sql).getResultSet();if(list1.size()0){BasicDynaBeanrowBean=null;Stringinfo=,separator=;for(inti=0;ilist1.size();i+
本文标题:java文件加密压缩及解密-流程图及源码
链接地址:https://www.777doc.com/doc-1950140 .html