现在的位置: 首页 > 综合 > 正文

DES的JAVA实现方法

2013年09月16日 ⁄ 综合 ⁄ 共 5032字 ⁄ 字号 评论关闭

/*  
    *   当前文件:DesEncrypt.java  
    *   创建日期:2005-7-29  
    *   版   本   号:1.0  
    *   作者:kang1  
    *    
    */  
   
  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  
  {  
  Key   key;  
   
  /**  
    *   根据参数生成KEY  
    *   @param   strKey  
    */  
  public   void   getKey(String   strKey)  
  {  
  try{  
  KeyGenerator   _generator   =   KeyGenerator.getInstance("DES");  
  _generator.init(new   SecureRandom(strKey.getBytes()));  
  this.key   =   _generator.generateKey();  
  _generator=null;  
  }catch(Exception   e){  
  e.printStackTrace();  
  }  
  }  
  /**  
    *   加密String明文输入,String密文输出  
    *   @param   strMing  
    *   @return  
    */  
  public   String   getEncString(String   strMing)  
  {  
  byte[]   byteMi   =   null;  
  byte[]   byteMing   =   null;  
  String   strMi   =   "";  
  BASE64Encoder   base64en   =   new   BASE64Encoder();  
  try  
  {  
  byteMing   =   strMing.getBytes("UTF8");  
  byteMi   =   this.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   String   getDesString(String   strMi)  
  {  
  BASE64Decoder   base64De   =   new   BASE64Decoder();  
  byte[]   byteMing   =   null;  
  byte[]   byteMi   =   null;  
  String   strMing   =   "";  
  try  
  {  
  byteMi   =   base64De.decodeBuffer(strMi);  
  byteMing   =   this.getDesCode(byteMi);  
  strMing   =   new   String(byteMing,   "UTF8");  
  }  
  catch(Exception   e)  
  {  
  e.printStackTrace();  
  }  
  finally  
  {  
  base64De   =   null;  
  byteMing   =   null;  
  byteMi   =   null;  
  }  
  return   strMing;  
  }  
  /**  
    *   加密以byte[]明文输入,byte[]密文输出  
    *   @param   byteS  
    *   @return  
    */  
  private   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   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){  
   
  System.out.println("hello");  
  DesEncrypt   des=new   DesEncrypt();//实例化一个对像  
  des.getKey("aadd");//生成密匙  
   
  String   strEnc   =   des.getEncString("钟汉康");//加密字符串,返回String的密文  
  System.out.println(strEnc);  
   
  String   strDes   =   des.getDesString(strEnc);//把String   类型的密文解密  
  System.out.println(strDes);  
   
  }  
   
  } 

------------------------------------------------

import   java.security.SecureRandom;  
   
  import   javax.crypto.Cipher;  
  import   javax.crypto.SecretKey;  
  import   javax.crypto.SecretKeyFactory;  
  import   javax.crypto.spec.DESKeySpec;  
   
  public   class   Encrypt   {  
       
          public   Encrypt()   {  
          }  
           
           
           
           
   
          public   byte[]   getKey()   throws   Exception   {  
                  return   "[B@170888e".getBytes();  
          }  
   
           
          public   byte[]   encryptData(String   encryptdata)  
                          throws   Exception   {  
                  SecureRandom   sr   =   new   SecureRandom();  
                  byte[]   rawKeyData   =   getKey();  
   
                  DESKeySpec   dks   =   new   DESKeySpec(rawKeyData);  
   
                  SecretKeyFactory   keyFactory   =   SecretKeyFactory.getInstance("DES");  
                  SecretKey   key   =   keyFactory.generateSecret(dks);  
                  Cipher   cipher   =   Cipher.getInstance("DES");  
                  cipher.init(Cipher.ENCRYPT_MODE,   key,   sr);  
                  byte[]   data   =   encryptdata.getBytes();  
                  byte[]   encryptedData   =   cipher.doFinal(data);  
   
                  return   encryptedData;  
          }  
   
          public   String   decryptData(byte[]   decryptdata)  
                          throws   Exception   {  
   
                  SecureRandom   sr   =   new   SecureRandom();  
   
                  byte[]   rawKeyData   =   getKey();  
                  DESKeySpec   dks   =   new   DESKeySpec(rawKeyData);  
   
                  SecretKeyFactory   keyFactory   =   SecretKeyFactory.getInstance("DES");  
                  SecretKey   key   =   keyFactory.generateSecret(dks);  
   
                  Cipher   cipher   =   Cipher.getInstance("DES");  
                  cipher.init(Cipher.DECRYPT_MODE,   key,   sr);  
   
                  byte[]   encryptedData   =   decryptdata;  
                  byte[]   decryptedData   =   cipher.doFinal(encryptedData);  
                  return   new   String(decryptedData);  
          }  
           
          public   static   void   main(String[]   args)   {  
                  try   {  
                          Encrypt   encrypt   =   new   Encrypt();  
                          String   enpasswd   =   encrypt.encryptData("111111");  
                          String   depasswd   =   encrypt.decryptData(   enpasswd   );  
   
                  }   catch   (Exception   e)   {  
                          e.printStackTrace();  
                  }  
          }  
  }   

抱歉!评论已关闭.