在这主要是用到两个流:
CipherInputStream cin=new CipherInputStream(in,c);
CipherOutputStream cout=new CipherOutputStream(out,c);
CipherOutputStream 由一个 OutputStream 和一个 Cipher 组成 ,write() 方法在将数据写出到基础 OutputStream 之前先对该数据进行处理(加密或解密) ,
同样CipherInputStream是由InputStream和一个Cipher组成,read()方法在读入时,对数据进行加解密操作.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
public class DES4 {
private static String Algorithm = "DES"; // 定义 加密算法,可用DES,DESede,Blowfish
static {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
}
// 生成密钥, 注意此步骤时间比较长
public static byte[] getKey() throws Exception {
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
return deskey.getEncoded();
}
/**
* 加密
* @param enfile 要加密的文件
* @param defile 加密后的文件
* @param key 密钥
* @throws Exception
*/
public static void encode(String enfile,String defile, byte[] key) throws Exception {
//秘密(对称)密钥(SecretKey继承(key))
//根据给定的字节数组构造一个密钥。
SecretKey deskey=new SecretKeySpec(key,Algorithm);
//生成一个实现指定转换的 Cipher 对象。Cipher对象实际完成加解密操作
Cipher c=Cipher.getInstance(Algorithm);
//用密钥初始化此 cipher
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] buffer=new byte[1024];
FileInputStream in=new FileInputStream(enfile);
OutputStream out=new FileOutputStream(defile);
//从 InputStream 和 Cipher 构造 CipherInputStream。
// read() 方法在从基础 InputStream 读入已经由 Cipher 另外处理(加密或解密)
CipherInputStream cin=new CipherInputStream(in,c);
int i;
while((i=cin.read(buffer))!=-1){
// for(int k=0;k<i;k++){
// System.out.print(buffer[k]+" ");
// }
out.write(buffer,0,i);
}
out.close();
cin.close();
}
// 解密
public static void decode(String file,String defile, byte[] key) throws Exception {
// //根据给定的字节数组构造一个密钥。
// SecretKey deskey=new SecretKeySpec(key,Algorithm);
// //生成一个实现指定转换的 Cipher 对象。
// Cipher c=Cipher.getInstance(Algorithm);
// //用密钥初始化此 cipher
// c.init(Cipher.DECRYPT_MODE, deskey);
//DES算法要求有一个可信任的随机数源
SecureRandom sr=new SecureRandom();
//创建一个 DESKeySpec 对象,指定一个 DES 密钥
DESKeySpec ks=new DESKeySpec(key);
//生成指定秘密密钥算法的 SecretKeyFactory 对象。
SecretKeyFactory factroy=SecretKeyFactory.getInstance(Algorithm);
//根据提供的密钥规范(密钥材料)生成 SecretKey 对象,利用密钥工厂把DESKeySpec转换成一个SecretKey对象
SecretKey sk=factroy.generateSecret(ks);
//生成一个实现指定转换的 Cipher 对象。Cipher对象实际完成加解密操作
Cipher c=Cipher.getInstance(Algorithm);
//用密钥和随机源初始化此 cipher
c.init(Cipher.DECRYPT_MODE, sk,sr);
byte[] buffer=new byte[1024];
FileInputStream in=new FileInputStream(file);
OutputStream out=new FileOutputStream(defile);
//CipherOutputStream 由一个 OutputStream 和一个 Cipher 组成
//write() 方法在将数据写出到基础 OutputStream 之前先对该数据进行处理(加密或解密)
CipherOutputStream cout=new CipherOutputStream(out,c);
int i;
while((i=in.read(buffer))!=-1){
// for(int k=0;k<i;k++){
// System.out.print(buffer[k]+" ");
// }
cout.write(buffer,0,i);
}
cout.close();
in.close();
}
public static void main(String[] args)throws Exception {
byte[] key="00000000".getBytes();
//文件加密
encode("E:/test/des.txt","E:/test/encrypt.txt",key);
//文件解密
decode("E:/test/encrypt.txt","E:/test/decrypt.txt",key);
}
}
分享到:
相关推荐
文件的加密解密,一些流的操作,流的加密....DES;文件的加密解密,一些流的操作,流的加密....DES
对txt文件的加密解密,采用c++编写。
文件加密解密 文件切割工具 等许多 文件加密解密 文件切割工具文件加密解密 文件切割工具文件加密解密 文件切割工具文件加密解密 文件切割工具文件加密解密 文件切割工具
利用java实现将资源文件(包括图片、动画等类型)进行简单的加密、解密
文件加密解密代码
PrimaSoft Encryption Utility强大的enc文件加密解密工具 可成功运用在惊天动地enc
文件加密解密系统
米牛文件加密解密专家是一款专业强劲的文件加密解密软件,采用多线程加解密方式,加密速度快、安全性高、资源消耗低,不仅拥有文件/文件夹加密、解密、打开等功能,而且对本地加密/解密,更安全、更高效,并且软件...
程序对通达信所有文件加密解密。直接拖拽问件到界面即可。
利用汇编语言编写的文件加密解密程序,有详细解释说明、源代码
对文件进行异或加密解密。注释有,稍微还有点bug,但是不是很影响吧。采用C语言编写的。能够对一个文本文件进行异或加密,加密成论文一个文件,还可以解密,解密成一个解密文件
加密和解密文件,有GUI界面,很好用,代码完整,加密解密效率高。
Java 文件加密解密器 可对所有文件进行加密和解密,第一次运行加密,第二次运行解密。
C#文件加密解密
这是基于VC2010平台下的对文本文件加密解密的一个程序,有整个工程源码
实现C#加密各种文件 和解密加密后的文件 完整工程 直接可以编译运行
很久之前,刚开始学c++时候写的dll,今天在用...主要应用于对视频文件的加密解密(其他文件未做尝试)。文件很小,包含编译后win32位和x64(更改后缀即可食用)。另外已附上说明文档。为方便阅读,dll未进行加壳处理。
本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现,产生加密文件,再对加密文件进行解密。 关键词:DES加密算法、加密、解密。摘要 随着现代网络技术的飞速发展,人们...
MD5 单向加密 SHA1 单向加密 DES 双向,可解密 加密字符串 ...RSA加密解密及RSA签名和验证 RSA 的密钥产生 产生私钥 和公钥 RSA 方式加密 RSA的解密函数 获取Hash描述表 RSA签名 RSA 签名验证
一个小巧的文件加密解密工具,采用标准3DES算法,可对任意文件进行加密,加密强度极高。