Java对文件压缩/加密/解密/解压缩的例子,DES/RSA
RSA压缩加密/解压缩解密
AES压缩加密/解压缩解密,网上一般用base64来对byte[]编码,其实不需要,指定AES/CBC/PKCS5Padding来指定加密解密时候位数不对的情况下,用pkcs5padding来附加位数,不过这个时候读解密的文件的时候,要多读16位的验证位就不会报异常
加密:encryptZip
通过路径找到Key:getKey
解密:decryptUnzip
转自【http://topic.csdn.net/u/20081215/09/6ad763bd-a158-488a-8e5e-b34cec2a0424.html及http://www.blogjava.net/zhaochengming/archive/2007/09/03/142396.html】
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.FileOutputStream;
- importjava.io.ObjectInputStream;
- importjava.io.ObjectOutputStream;
- importjava.security.Key;
- importjava.security.KeyPair;
- importjava.security.KeyPairGenerator;
- importjava.security.PrivateKey;
- importjava.security.PublicKey;
- importjava.security.SecureRandom;
- importjava.util.Properties;
- importjava.util.UUID;
- importjava.util.zip.ZipEntry;
- importjava.util.zip.ZipInputStream;
- importjava.util.zip.ZipOutputStream;
-
- importjavax.crypto.Cipher;
-
- /**
- *对文件压缩加密/解密解压缩对象类
- *
- */
- publicclassZipEncrypt{
- privatestaticPrivateKeyprivateKey;
- privatestaticPublicKeypublicKey;
- privatestaticvoiddirectoryZip(ZipOutputStreamout,Filef,Stringbase)
- throwsException{
- //如果传入的是目录
- if(f.isDirectory()){
- File[]fl=f.listFiles();
- //创建压缩的子目录
- out.putNextEntry(newZipEntry(base+"/"));
- if(base.length()==0){
- base="";
- }else{
- base=base+"/";
- }
- for(inti=0;i<fl.length;i++){
- directoryZip(out,fl[i],base+fl[i].getName());
- }
- }else{
- //把压缩文件加入rar中
- out.putNextEntry(newZipEntry(base));
- FileInputStreamin=newFileInputStream(f);
- byte[]bb=newbyte[2048];
- intaa=0;
- while((aa=in.read(bb))!=-1){
- out.write(bb,0,aa);
- }
- in.close();
- }
- }
-
- /**
- *压缩文件
- *@paramzos
- *@paramfile
- *@throwsException
- */
- privatestaticvoidfileZip(ZipOutputStreamzos,Filefile)
- throwsException{
- if(file.isFile()){
- zos.putNextEntry(newZipEntry(file.getName()));
- FileInputStreamfis=newFileInputStream(file);
- byte[]bb=newbyte[2048];
- intaa=0;
- while((aa=fis.read(bb))!=-1){
- zos.write(bb,0,aa);
- }
- fis.close();
- System.out.println(file.getName());
- }else{
- directoryZip(zos,file,"");
- }
- }
-
- /**
- *解压缩文件
- *
- *@paramzis
- *@paramfile
- *@throwsException
- */
- privatestaticvoidfileUnZip(ZipInputStreamzis,Filefile)
- throwsException{
- ZipEntryzip=zis.getNextEntry();
- if(zip==null)
- return;
- Stringname=zip.getName();
- Filef=newFile(file.getAbsolutePath()+"/"+name);
- if(zip.isDirectory()){
- f.mkdirs();
- fileUnZip(zis,file);
- }else{
- f.createNewFile();
- FileOutputStreamfos=newFileOutputStream(f);
- byteb[]=newbyte[2048];
- intaa=0;
- while((aa=zis.read(b))!=-1){
- fos.write(b,0,aa);
- }
- fos.close();
- fileUnZip(zis,file);
- }
- }
-
- /**
- *对directory目录下的文件压缩,保存为指定的文件zipFile
- *
- *@paramdirectory
- *@paramzipFile
- */
- privatestaticvoidzip(Stringdirectory,StringzipFile){
- try{
- ZipOutputStreamzos=newZipOutputStream(newFileOutputStream(
- zipFile));
- fileZip(zos,newFile(directory));
- zos.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
-
- /**
- *解压缩文件zipFile保存在directory目录下
- *
- *@paramdirectory
- *@paramzipFile
- */
- privatestaticvoidunZip(Stringdirectory,StringzipFile){
- try{
- ZipInputStreamzis=newZipInputStream(
- newFileInputStream(zipFile));
- Filef=newFile(directory);
- f.mkdirs();
- fileUnZip(zis,f);
- zis.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
-
- /**
- *根据key的路径文件获得持久化成文件的key
- *<P>
- *例子:RsaEncrypt.getKey("c:/systemkey/private.key");
- *
- *@paramkeyPath
- *@return
- */
- publicstaticKeygetKey(StringkeyPath)throwsException{
- Keykey=null;
- FileInputStreamfis=newFileInputStream(keyPath);
- ObjectInputStreamofs=newObjectInputStream(fis);
- key=(Key)ofs.readObject();
- returnkey;
- }
-
- /**
- *把文件srcFile加密后存储为destFile
- *
- *@paramsrcFile
- *@paramdestFile
- */
- privatestaticvoidencrypt(StringsrcFile,StringdestFile,KeyprivateKey)
- throwsException{
- Ciphercipher=Cipher.getInstance("RSA");
- cipher.init(Cipher.ENCRYPT_MODE,privateKey);
- FileInputStreamfis=newFileInputStream(srcFile);
- FileOutputStreamfos=newFileOutputStream(destFile);
- byte[]b=newbyte[53];
- while(fis.read(b)!=-1){
- fos.write(cipher.doFinal(b));
- }
- fos.close();
- fis.close();
- }
-
- /**
- *把文件srcFile解密后存储为destFile
- *
- *@paramsrcFile
- *@paramdestFile
- *@paramprivateKey
- *@throwsException
- */
- privatestaticvoiddecrypt(StringsrcFile,StringdestFile,KeyprivateKey)
- throwsException{
- Ciphercipher=Cipher.getInstance("RSA");
- cipher.init(Cipher.DECRYPT_MODE,privateKey);
- FileInputStreamfis=newFileInputStream(srcFile);
- FileOutputStreamfos=newFileOutputStream(destFile);
- byte[]b=newbyte[64];
- while(fis.read(b)!=-1){
- fos.write(cipher.doFinal(b));
- }
- fos.close();
- fis.close();
- }
-
- /**
- *对目录srcFile下的所有文件目录进行先压缩后操作,然后保存为destfile
- *
- *@paramsrcFile
- *要操作的目录如c:/test/test
- *@paramdestfile
- *压缩加密后存放的文件名如c:/加密压缩文件.zip
- *@paramkeyfile
- *公钥存放地点
- */
- publicstaticvoidencryptZip(StringsrcFile,Stringdestfile,Stringkeyfile)throwsException{
- SecureRandomsr=newSecureRandom();
- KeyPairGeneratorkg=KeyPairGenerator.getInstance("RSA");
- kg.initialize(512,sr);
- //产生新密钥对
- KeyPairkp=kg.generateKeyPair();
- //获得私匙
- ZipEncrypt.privateKey=kp.getPrivate();
- //获得公钥
- ZipEncrypt.publicKey=kp.getPublic();
- Filef=newFile(keyfile);
- f.createNewFile();
- FileOutputStreamfos=newFileOutputStream(f);
- ObjectOutputStreamdos=newObjectOutputStream(fos);
- dos.writeObject(ZipEncrypt.publicKey);
- Filetemp=newFile(UUID.randomUUID().toString()+".zip");
- temp.deleteOnExit();
- //先压缩文件
- zip(srcFile,temp.getAbsolutePath());
- //对文件加密
- encrypt(temp.getAbsolutePath(),destfile,privateKey);
- temp.delete();
- }
-
- /**
- *对文件srcfile进行先解密后解压缩,然后解压缩到目录destfile下
- *
- *@paramsrcfile
- *要解密和解压缩的文件名如c:/目标.zip
- *@paramdestfile
- *解压缩后的目录如c:/abc
- *@parampublicKey
- *公钥
- */
- publicstaticvoiddecryptUnzip(Stringsrcfile,Stringdestfile,
- KeypublicKey)throwsException{
- //先对文件解密
- Filetemp=newFile(UUID.randomUUID().toString()+".zip");
- temp.deleteOnExit();
- decrypt(srcfile,temp.getAbsolutePath(),publicKey);
- //解压缩
- unZip(destfile,temp.getAbsolutePath());
- temp.delete();
- }
-
- publicstaticvoidmain(Stringargs[])throwsException{
- Filef=newFile(".");
- Propertiesprop=newProperties();;
- FileInputStreamfis=newFileInputStream("./conf.properties");
- prop.load(fis);
- //要压缩的目录
- StringsrcPath=prop.getProperty("SRC_PATH");
- //压缩后的存放文件
- StringdestZip=prop.getProperty("DEST_FILE");
- //压缩加密后的publickey
- Stringkeyfile=prop.getProperty("KEY_FILE");
- ZipEncrypt.encryptZip(srcPath,destZip,keyfile);
- /*解密
- ZipEncrypt.decryptUnzip("e:/comXXX/comxxxx.zip","d:/comxxx",ZipEncrypt
- .getKey("e:/comXXX/public.key"));
- */
- }
- }
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.FileOutputStream;
- importjava.io.ObjectInputStream;
- importjava.security.Key;
- importjava.security.SecureRandom;
- importjava.util.UUID;
- importjava.util.zip.ZipEntry;
- importjava.util.zip.ZipInputStream;
- importjava.util.zip.ZipOutputStream;
-
- importjavax.crypto.Cipher;
- importjavax.crypto.KeyGenerator;
- importjavax.crypto.SecretKey;
- importjavax.crypto.spec.IvParameterSpec;
- importjavax.crypto.spec.SecretKeySpec;
-
- /**
- *对文件加密/解密和压缩/解压缩对象类
- *@author赵成明
- */
- publicclassZipEncrypt{
- privatevoiddirectoryZip(ZipOutputStreamout,Filef,Stringbase)
- throwsException{
- //如果传入的是目录
- if(f.isDirectory()){
- File[]fl=f.listFiles();
- //创建压缩的子目录
- out.putNextEntry(newZipEntry(base+"/"));
- if(base.length()==0){
- base="";
- }else{
- base=base+"/";
- }
- for(inti=0;i<fl.length;i++){
- directoryZip(out,fl[i],base+fl[i].getName());
- }
- }else{
- //把压缩文件加入rar中
- out.putNextEntry(newZipEntry(base));
- FileInputStreamin=newFileInputStream(f);
- byte[]bb=newbyte[2048];
- intaa=0;
- while((aa=in.read(bb))!=-1){
- out.write(bb,0,aa);
- }
- in.close();
- }
- }
-
- /**
- *压缩文件
- *@paramzos
- *@paramfile
- *@throwsException
- */
- privatevoidfileZip(ZipOutputStreamzos,Filefile)
- throwsException{
- if(file.isFile()){
- zos.putNextEntry(newZipEntry(file.getName()));
- FileInputStreamfis=newFileInputStream(file);
- byte[]bb=newbyte[2048];
- intaa=0;
- while((aa=fis.read(bb))!=-1){
- zos.write(bb,0,aa);
- }
- fis.close();
- System.out.println(file.getName());
- }else{
- directoryZip(zos,file,"");
- }
- }
-
- /**
- *解压缩文件
- *
- *@paramzis
- *@paramfile
- *@throwsException
- */
- privatevoidfileUnZip(ZipInputStreamzis,Filefile)
- throwsException{
- ZipEntryzip=zis.getNextEntry();
- if(zip==null)
- return;
- Stringname=zip.getName();
- Filef=newFile(file.getAbsolutePath()+"/"+name);
- if(zip.isDirectory()){
- f.mkdirs();
- fileUnZip(zis,file);
- }else{
- f.createNewFile();
- FileOutputStreamfos=newFileOutputStream(f);
- byteb[]=newbyte[2048];
- intaa=0;
- while((aa=zis.read(b))!=-1){
- fos.write(b,0,aa);
- }
- fos.close();
- fileUnZip(zis,file);
- }
- }
-
- /**
- *对directory目录下的文件压缩,保存为指定的文件zipFile
- *
- *@paramdirectory
- *@paramzipFile
- */
- privatevoidzip(Stringdirectory,StringzipFile){
- try{
- ZipOutputStreamzos=newZipOutputStream(newFileOutputStream(
- zipFile));
- fileZip(zos,newFile(directory));
- zos.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
-
- /**
- *解压缩文件zipFile保存在directory目录下
- *
- *@paramdirectory
- *@paramzipFile
- */
- privatevoidunZip(Stringdirectory,StringzipFile){
- try{
- ZipInputStreamzis=newZipInputStream(newFileInputStream(zipFile));
- Filef=newFile(directory);
- f.mkdirs();
- fileUnZip(zis,f);
- zis.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
-
- /**
- *根据key的路径文件获得持久化成文件的key
- *<P>
- *例子:RsaEncrypt.getKey("c:/systemkey/private.key");
- *
- *@paramkeyPath
- *@return
- */
- privateKeygetKey(StringkeyPath)throwsException{
- FileInputStreamfis=newFileInputStream(keyPath);
- byte[]b=newbyte[16];
- fis.read(b);
- SecretKeySpecdks=newSecretKeySpec(b,"AES");
- fis.close();
- returndks;
- }
-
- /**
- *把文件srcFile加密后存储为destFile
- *
- *@paramsrcFile
- *@paramdestFile
- */
- privatevoidencrypt(StringsrcFile,StringdestFile,KeyprivateKey)
- throwsException{
- SecureRandomsr=newSecureRandom();
- Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
- IvParameterSpecspec=newIvParameterSpec(privateKey.getEncoded());
- cipher.init(Cipher.ENCRYPT_MODE,privateKey,spec,sr);
- FileInputStreamfis=newFileInputStream(srcFile);
- FileOutputStreamfos=newFileOutputStream(destFile);
- byte[]b=newbyte[2048];
- while(fis.read(b)!=-1){
- fos.write(cipher.doFinal(b));
- }
- fos.close();
- fis.close();
- }
-
- /**
- *把文件srcFile解密后存储为destFile
- *
- *@paramsrcFile
- *@paramdestFile
- *@paramprivateKey
- *@throwsException
- */
- privatevoiddecrypt(StringsrcFile,StringdestFile,KeyprivateKey)
- throwsException{
- SecureRandomsr=newSecureRandom();
- Cipherciphers=Cipher.getInstance("AES/CBC/PKCS5Padding");
- IvParameterSpecspec=newIvParameterSpec(privateKey.getEncoded());
- ciphers.init(Cipher.DECRYPT_MODE,privateKey,spec,sr);
- FileInputStreamfis=newFileInputStream(srcFile);
- FileOutputStreamfos=newFileOutputStream(destFile);
- byte[]b=newbyte[2064];
- while(fis.read(b)!=-1){
- fos.write(ciphers.doFinal(b));
- }
- fos.close();
- fis.close();
- }
-
- /**
- *对目录srcFile下的所有文件目录进行先压缩后操作,然后保存为destfile
- *
- *@paramsrcFile
- *要操作的目录如c:/test/test
- *@paramdestfile
- *压缩加密后存放的文件名如c:/加密压缩文件.zip
- *@paramkeyfile
- *公钥存放地点
- */
- publicvoidencryptZip(StringsrcFile,Stringdestfile,Stringkeyfile)throwsException{
- SecureRandomsr=newSecureRandom();
- KeyGeneratorkg=KeyGenerator.getInstance("AES");
- kg.init(128,sr);
- SecretKeykey=kg.generateKey();
- Filef=newFile(keyfile);
- if(!f.getParentFile().exists())
- f.getParentFile().mkdirs();
- f.createNewFile();
- FileOutputStreamfos=newFileOutputStream(f);
- fos.write(key.getEncoded());
- Filetemp=newFile(UUID.randomUUID().toString()+".zip");
- temp.deleteOnExit();
- //先压缩文件
- zip(srcFile,temp.getAbsolutePath());
- //对文件加密
- encrypt(temp.getAbsolutePath(),destfile,key);
- temp.delete();
- }
-
- /**
- *对文件srcfile进行先解密后解压缩,然后解压缩到目录destfile下
- *
- *@paramsrcfile
- *要解密和解压缩的文件名如c:/目标.zip
- *@paramdestfile
- *解压缩后的目录如c:/abc
- *@parampublicKey
- *公钥
- */
- publicvoiddecryptUnzip(Stringsrcfile,Stringdestfile,
- Stringkeyfile)throwsException{
- //先对文件解密
- Filetemp=newFile(UUID.randomUUID().toString()+".zip");
- temp.deleteOnExit();
- decrypt(srcfile,temp.getAbsolutePath(),this.getKey(keyfile));
- //解压缩
- unZip(destfile,temp.getAbsolutePath());
- temp.delete();
- }
-
- publicstaticvoidmain(Stringargs[])throwsException{
- longa=System.currentTimeMillis();
- newZipEncrypt().encryptZip("e:/com","e:/comXXX/page.zip","e:/comXXX/public.key");
- System.out.println(System.currentTimeMillis()-a);
- a=System.currentTimeMillis();
- newZipEncrypt().decryptUnzip("e:/comXXX/page.zip","e:/comxxx","e:/comXXX/public.key");
- System.out.println(System.currentTimeMillis()-a);
- }
- }
通过路径找到Key:getKey
解密:decryptUnzip
转自【http://topic.csdn.net/u/20081215/09/6ad763bd-a158-488a-8e5e-b34cec2a0424.html及http://www.blogjava.net/zhaochengming/archive/2007/09/03/142396.html】
相关推荐
Java 实现文件的 RSA 和 DES 加密 在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的...
在SpringBoot应用中,我们经常需要处理数据的安全性,包括对控制器返回的响应体进行编码或加密,以及对接收到的请求体进行解密。这样的需求可以通过自定义注解和处理器来实现,支持多种常见的加密算法,如MD5、SHA、...
RSA公钥加密/私钥解密。RSA签名/验签。各种散列:MD2/MD4/MD5,SHA/SHA1/SHA256/SHA384/SHA512。HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512。PEM文件纯易语言解析,载入,导出。FPX文件...
在本压缩包中,提供了RSA加密解密的工具——PRO_TDES_RSA.exe,这是一个执行程序,能够帮助用户对文件进行加密和解密操作。结合"RSATool工具简易操作指南 .doc",用户可以详细了解如何使用这个工具来保护他们的敏感...
2. 加密过程:C#使用RSA公钥或DES密钥加密数据,Java接收并解密。 3. 解密过程:Java使用RSA私钥或DES密钥加密数据,C#接收并解密。 在实现过程中,还需要注意以下几点: - 对于RSA,确保使用相同的模数和指数进行...
在项目`encryption_and_decryption`中,可能包含了使用JAVA实现RSA和3DES加密解密的示例代码,通过这些代码可以学习如何在实际开发中应用这两种加密技术。了解并掌握这些加密算法的原理和使用方法,对于提升应用程序...
winform做的一个小工具(源码),包括MD5加密、DES加密解密,RSA公钥密钥生成,RSA加密解密这几个功能。 pc6上找到的,不知道原作者是谁,感谢之。
本文将深入探讨标题中提及的两种主要加密算法:DES(Data Encryption Standard)和RSA,并介绍如何利用它们对文件进行加密。我们将结合描述中的“提供了方便文件加密接口”来阐述如何在实际应用中实现这些加密方法。...
2. **后端解密**:服务器接收到数据后,使用私钥解密RSA加密的部分,然后如果使用了DES,再用预先设定的密钥解密DES加密的数据。 3. **数据处理**:后端完成解密后,可以安全地处理这些数据,例如,进行数据库操作...
对称加密如DES、3DES、AES等,其特点是加密和解密使用相同的密钥,速度快,适用于大量数据的加密。而非对称加密,如RSA、ECC,采用一对公钥和私钥,公钥用于加密,私钥用于解密,安全性更高,但计算复杂度相对较大,...
在Eclipse 3.4环境下,开发者可以创建Java项目,导入这些源码,并进行编译和运行,以直观地了解RSA和DES的加密解密过程。通过这种方式,初学者可以更好地理解这两种加密算法的实现细节,并为进一步深入研究密码学...
在Java编程中,加密技术是确保数据安全的重要手段,DES(Data Encryption Standard)和RSA(Rivest-Shamir-Adleman)是两种常见的加密算法,它们分别属于对称加密和非对称加密。 1. **DES(数据加密标准)**: - ...
总共两个用户 A和B, A负责加密,B解密。用Java编写界面。 首先A用DES对选定文件加密,用hash函数对明文提取hash值,RSA对hash值加密, 然后B对加密的文件解密,对A的s值解密,比较两个值
这里我们关注的是“RSA结合DES加密解密大数据”的主题。RSA和DES都是常见的加密算法,它们各自具有不同的特点和应用场景,而将两者结合使用则可以充分利用它们的优势,为大数据提供更高级别的安全保障。 RSA...
10. **源代码与实践**:提供的RAR文件可能包含RSA加密和解密的源代码及可执行文件,这对于学习密码学理论和实践非常有价值。通过阅读和运行这些代码,可以深入理解RSA的工作机制。 总之,RSA加密算法是现代密码学的...
同时,实验还包括对一个磁盘文本文件进行加密和解密的实际应用,以检验算法的可行性。 实验内容虽然提及了AES加密/解密,但主要关注点应是RSA算法。AES(Advanced Encryption Standard)是对称加密算法,与RSA不同...
综上所述,这个C#项目旨在提供一个与Java平台兼容的RSA加密解密工具,方便跨平台的数据安全传输。开发人员可以利用这个工具包,使用C#进行RSA操作,同时处理来自Java环境的公钥和私钥。这在多语言协作或者混合系统...
在给定的"MD5加密,DES,RSA加解密工具"中,用户可以通过Encoder.exe文件实现这三种加密方式的操作。MD5用于快速校验数据完整性,而DES和RSA则提供加密服务。DES适合大量数据的加密,因为其速度较快,但需要保证密钥...
本文将详细介绍C#环境下如何实现DES、3DES和RSA这三种常见的加密解密算法,并基于VS2005开发一个Winform应用程序来演示其实现过程。 首先,DES(Data Encryption Standard)是一种对称加密算法,它使用56位的密钥对...