DES加密解密的详细例子

来源:互联网 发布:mac apache php mysql 编辑:程序博客网 时间:2024/06/13 12:52

本人想通过一个简单加密和解密来对通讯的字符串进行安全监控。经过 一番的查找后,并对其进行了完整的整理。得出如下本人的代码,该代码经过了测试!

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

 

原创粉丝点击