数字信封加密技术(RSA和DES结合起来的算法)
这种算法结合了DES和RSA两种算法的优点于一身
原理为:
!.发送者利用DES密钥对重要数据进行加密
2.发送者利用RSA公钥对DES密钥进行加密
3.传送消息
4.接收者收到消息后,利用RSA私钥对经过加密的DES密钥进行解密
5.接收者利用RSA密钥解密解得的DES密钥对重要数据进行解密
在此文中,先产生,本次模拟所要的DES密钥和RSA密钥
然后按照上面五个步骤进行模拟:
1.产生DES密钥
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package digital.envolope.technology;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
/**
*
* @author Administrator
*/
public class GenerateDESKey {//产生DES密钥
public static void main(String[] args) {
try {
//密钥生成器
KeyGenerator kg = KeyGenerator.getInstance("DESede"); //采用双重des加密算法
//设置密钥长度为168位
kg.init(168);
//生成密钥
SecretKey k=kg.generateKey();
//将密钥保存在文件中
File dir=new File("digitalEnvolope");
boolean pass= dir.mkdir();//创建目录
if(!pass){
File file=new File(dir,"key.dat");
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream OOS=new ObjectOutputStream(out);
OOS.writeObject(k);//必须以可序列化对象的形式写入,否则在用ObjectInputStream读取时会抛出异常
out.close();
OOS.close();
}
} catch (Exception ex) {
Logger.getLogger(GenerateDESKey.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
2.产生RSR密钥对
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package digital.envolope.technology;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.File;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Administrator
*/
public class GenKey {
public static void main(String[] args){
try {
//创建密钥对生成器
KeyPairGenerator KPG = KeyPairGenerator.getInstance("RSA");
//初始化密钥生成器
KPG.initialize(1024);
//生成密钥对
KeyPair KP=KPG.genKeyPair();
//获取公钥和密钥
PublicKey pbKey=KP.getPublic();