天天看点

JAVA实现DES加解密实现详解

des加密介绍

       des是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。des加密算法出自ibm的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为des使用56位密钥,以现代计算能力,24小时内即可被破解。     虽然如此,在某些简单应用中,我们还是可以使用des加密算法,本文简单讲解des的java实现

。注意:des加密和解密过程中,密钥长度都必须是8的倍数

packageutil;

importjava.security.securerandom;

importjavax.crypto.spec.deskeyspec;

importjavax.crypto.secretkeyfactory;

importjavax.crypto.secretkey;

importjavax.crypto.cipher;

publicclassdes{

publicdes(){

}

//测试

publicstaticvoidmain(stringargs[]){

//待加密内容

stringstr="测试内容";

//密码,长度要是8的倍数

stringpassword=

"9588028820109132570743325311898426347857298773549468758875018579537757772163084478873699447306034466200616411960574122434059469100235892702736860872901247123456";

byte[]result=des.encrypt(str.getbytes(),password);

system.out.println("加密后:"+newstring(result));

//直接将如上内容解密

try{

byte[]decryresult=des.decrypt(result,password);

system.out.println("解密后:"+newstring(decryresult));

}catch(exceptione1){

e1.printstacktrace();

/**

*加密

*@paramdatasourcebyte[]

*@parampasswordstring

*@returnbyte[]

*/

publicstaticbyte[]encrypt(byte[]datasource,stringpassword){

securerandom random=new securerandom();

deskeyspec deskey=new deskeyspec(password.getbytes());

//创建一个密匙工厂,然后用它把deskeyspec转换成

secretkeyfactory keyfactory=secretkeyfactory.getinstance("des");

secretkey securekey=keyfactory.generatesecret(deskey);

//cipher对象实际完成加密操作

ciphercipher=cipher.getinstance("des");

//用密匙初始化cipher对象

cipher.init(cipher.encrypt_mode,securekey,random);

//现在,获取数据并加密

//正式执行加密操作

returncipher.dofinal(datasource);

}catch(throwablee){

e.printstacktrace();

returnnull;

*解密

*@paramsrcbyte[]

*@throwsexception

publicstaticbyte[]decrypt(byte[]src,stringpassword)throwsexception{

//des算法要求有一个可信任的随机数源

secure random random=newsecurerandom();

//创建一个deskeyspec对象

deskeyspecdeskey=newdeskeyspec(password.getbytes());

//创建一个密匙工厂

secretkeyfactorykeyfactory=secretkeyfactory.getinstance("des");

//将deskeyspec对象转换成secretkey对象

//cipher对象实际完成解密操作

cipher cipher=cipher.getinstance("des");

cipher.init(cipher.decrypt_mode,securekey,random);

//真正开始解密操作

returncipher.dofinal(src);