DES加密解密的詳細例子

本人想通過一個簡單加密和解密來對通訊的字符串進行安全監控。經過 一番的查找後,並對其進行了完整的整理。得出如下本人的代碼,該代碼經過了測試!

import   java.security.Key;  
import   java.security.SecureRandom;  
import   javax.crypto.Cipher;  
import   javax.crypto.KeyGenerator;  
import   sun.misc.BASE64Decoder;  
import   sun.misc.BASE64Encoder;  
 
/**  
  *    
  *   使用DES加密與解密,可對byte[],String類型進行加密與解密  
  *   密文可使用String,byte[]存儲.  
  *    
  *   方法:  
  *   void   getKey(String   strKey)從strKey的字條生成一個Key  
  *    
  *   String   getEncString(String   strMing)對strMing進行加密,返回String密文  
  *   String   getDesString(String   strMi)對strMin進行解密,返回String明文  
  *    
  *   byte[]   getEncCode(byte[]   byteS)byte[]型的加密  
  *   byte[]   getDesCode(byte[]   byteD)byte[]型的解密  
  */  
 
public class DesEncrypt  
{  
 private static Key key;
 /**  
   *   根據參數生成KEY  
   *   @param   strKey  
   */  
 public static void getKey(String strKey){  
  try{  
   KeyGenerator   _generator   =   KeyGenerator.getInstance("DES");  
   _generator.init(new   SecureRandom(strKey.getBytes()));  
   key   =   _generator.generateKey();  
   _generator=null;  
  }catch(Exception   e){  
   e.printStackTrace();  
  }  
 }  
 /**
  * 加密String明文輸入,String密文輸出
  * @param strMing
  * @param key    
  * @return
  */
 public static String getEncString(String strMing,String key){  
  byte[]   byteMi   =   null;  
  byte[]   byteMing   =   null;  
  String   strMi   =   "";  
  BASE64Encoder   base64en   =   new   BASE64Encoder();  
  try {  
   getKey(key);
   byteMing   =   strMing.getBytes("GB2312");  
   byteMi   =   getEncCode(byteMing);  
   strMi   =   base64en.encode(byteMi);  
  }catch(Exception   e){  
   e.printStackTrace();  
  }finally {  
   base64en   =   null;  
   byteMing   =   null;  
   byteMi   =   null;  
  }  
  return   strMi;  
 }  
 /**  
   *   解密   以String密文輸入,String明文輸出  
   *   @param   strMi  
   *   @return  
   */  
 public static String getDesString(String strMi,String key){  
  BASE64Decoder   base64De   =   new   BASE64Decoder();  
  byte[]   byteMing   =   null;  
  byte[]   byteMi   =   null;  
  String   strMing   =   "";  
  try{  
   getKey(key);
   byteMi = base64De.decodeBuffer(strMi);  
   byteMing = getDesCode(byteMi);  
   strMing = new String(byteMing,"GB2312");  
  }catch(Exception   e){  
   e.printStackTrace();  
  }finally{  
   base64De   =   null;  
   byteMing   =   null;  
   byteMi   =   null;  
  }  
  return   strMing;  
 }  
 /**  
   *   加密以byte[]明文輸入,byte[]密文輸出  
   *   @param   byteS  
   *   @return  
   */  
 private static byte[] getEncCode(byte[] byteS)  
 {  
  byte[]   byteFina   =   null;  
  Cipher   cipher;  
  try{  
   cipher = Cipher.getInstance("DES");  
   cipher.init(Cipher.ENCRYPT_MODE,key);  
   byteFina = cipher.doFinal(byteS);  
  }catch(Exception e){  
   e.printStackTrace();  
  }  
  finally  
  {  
   cipher   =   null;  
  }  
  return   byteFina;  
 }  
 /**  
   *   解密以byte[]密文輸入,以byte[]明文輸出  
   *   @param   byteD  
   *   @return  
   */  
 private static byte[] getDesCode(byte[] byteD)  
 {  
  Cipher   cipher;  
  byte[]   byteFina=null;  
  try{  
   cipher   =   Cipher.getInstance("DES");  
   cipher.init(Cipher.DECRYPT_MODE,   key);  
   byteFina   =   cipher.doFinal(byteD);  
  }catch(Exception   e){  
   e.printStackTrace();  
  }finally{  
   cipher=null;  
  }  
  return   byteFina;     
 }
 public static void main(String args[]){
   DesEncrypt des = new DesEncrypt();
   String   strEnc   =   des.getEncString("OKID","xxx");//加密字符串,返回String的密文  
   System.out.println(strEnc);
   String   strDes   =   des.getDesString(strEnc,"xxx");//把String   類型的密文解密  
   System.out.println(strDes);  
 }
}  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章