DES的JAVA實現方法

來源:互聯網
上載者:User

/*  
    *   當前檔案: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();  
                  }  
          }  
  }   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.