天天看點

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);