java 兑现des加密

java 实现des加密!
DES.java  
   
   
   package    Lion.Security.Cryptography;  
   
   import    javax.crypto.Cipher;  
   import    javax.crypto.KeyGenerator;  
   import    javax.crypto.NoSuchPaddingException;  
   import    javax.crypto.SecretKey;  
   import    java.security.NoSuchAlgorithmException;  
   import    java.security.Security;  
   /**  
     *    DES加密的,文件*有两个方法,加密、解密  
     *    @author    Lion  
     *    @author    www.lionsky.net  
     */  
   public    class    DES    {  
           private    String    Algorithm    =    "DES";  
           private    KeyGenerator    keygen;  
           private    SecretKey    deskey;  
           private    Cipher    c;  
           private    byte[]    cipherByte;  
   
           /**  
             *    初始化    DES    实例  
             */  
           public    DES()    {  
                       init();  
           }  
   
           public    void    init()    {  
                   Security.addProvider(new    com.sun.crypto.provider.SunJCE());  
                   try    {  
                                 keygen    =    KeyGenerator.getInstance(Algorithm);  
                                 deskey    =    keygen.generateKey();  
                                 c    =    Cipher.getInstance(Algorithm);  
                     }  
                     catch(NoSuchAlgorithmException    ex){  
                           ex.printStackTrace();  
                   }  
                     catch(NoSuchPaddingException    ex){  
                           ex.printStackTrace();  
                   }  
                 }  
   
           /**  
             *    对    String    进行加密  
             *    @param    str    要加密的数据  
             *    @return    返回加密后的    byte    数组  
             */  
             public    byte[]    createEncryptor(String    str)    {  
                   try    {  
                             c.init(Cipher.ENCRYPT_MODE,    deskey);  
                             cipherByte    =    c.doFinal(str.getBytes());  
                   }  
                   catch(java.security.InvalidKeyException    ex){  
                           ex.printStackTrace();  
                   }  
                   catch(javax.crypto.BadPaddingException    ex){  
                           ex.printStackTrace();  
                   }  
                   catch(javax.crypto.IllegalBlockSizeException    ex){  
                           ex.printStackTrace();  
                   }  
                   return    cipherByte;  
             }  
   
           /**  
             *    对    Byte    数组进行解密  
             *    @param    buff    要解密的数据  
             *    @return    返回加密后的    String  
             */  
             public    String    createDecryptor(byte[]    buff)    {  
                   try    {  
                         c.init(Cipher.DECRYPT_MODE,    deskey);  
                         cipherByte    =    c.doFinal(buff);  
                   }  
                   catch(java.security.InvalidKeyException    ex){  
                           ex.printStackTrace();  
                   }  
                   catch(javax.crypto.BadPaddingException    ex){  
                           ex.printStackTrace();  
                   }  
                   catch(javax.crypto.IllegalBlockSizeException    ex){  
                           ex.printStackTrace();  
                   }  
                   return    (new    String(cipherByte));  
             }  
   }  
   
     
   
   DES.jsp  
   
   
   <%@    page    c    %>  
   <jsp:useBean    id="DES"    scope="page"    class="Lion.Security.Cryptography.DES"    />  
   <html>  
   <head><title>DES    File</title></head>  
   
   <body    bgcolor="#FFFFFF">  
   <div    align="center"><center>  
   <%  
   String    Test    =    request.getParameter("Test");  
   if(Test==null    ||    Test.equals(""))    {  
   %>  
           <form    name="form"    method="post">  
           <input    type="text"    name="Test"    size="25"    value=""/>  
           <input    type="submit"    name="button"    value="    确定    "/>  
           </form>  
           <%  
   }else{  
                           out.println("加密前的数据:"+Test    +"<br/>");  
                           out.println("加密后的数据:"+DES.createEncryptor(Test)    +"<br/>");  
                           out.println("解密后的数据:"+DES.createDecryptor(DES.createEncryptor(Test))    +"<br/>");  
               }  
           %>  
   </center></div>  
   </body>  
   </html>  
   
  Top
6 楼laughsmile(海边的星空) 回复于 2005-06-08 21:09:56 得分 60
import    javax.crypto.*;  
   import    java.io.*;  
   import    javax.crypto.spec.*;  
   import    java.security.spec.*;  
   
   public    class    DesEncrypter    {  
                   Cipher    ecipher;  
                   Cipher    dcipher;  
           
                   //    8-byte    Salt  
                   byte[]    salt    =    {  
                           (byte)0xA9,    (byte)0x9B,    (byte)0xC8,    (byte)0x32,  
                           (byte)0x56,    (byte)0x35,    (byte)0xE3,    (byte)0x03  
                   };  
           
                   //    Iteration    count  
                   int    iterationCount    =    19;  
           
                   DesEncrypter(String    passPhrase)    {  
                           try    {  
                                   //    Create    the    key  
                                   KeySpec    keySpec    =    new    PBEKeySpec(passPhrase.toCharArray(),    salt,    iterationCount);  
                                   SecretKey    key    =    SecretKeyFactory.getInstance(  
                                           "PBEWithMD5AndDES").generateSecret(keySpec);  
                                   ecipher    =    Cipher.getInstance(key.getAlgorithm());  
                                   dcipher    =    Cipher.getInstance(key.getAlgorithm());  
           
                                   //    Prepare    the    parameter    to    the    ciphers  
                                   AlgorithmParameterSpec    paramSpec    =    new    PBEParameterSpec(salt,    iterationCount);  
           
                                   //    Create    the    ciphers  
                                   ecipher.init(Cipher.ENCRYPT_MODE,    key,    paramSpec);  
                                   dcipher.init(Cipher.DECRYPT_MODE,    key,    paramSpec);  
                           }    catch    (java.security.InvalidAlgorithmParameterException    e)    {  
                           }    catch    (java.security.spec.InvalidKeySpecException    e)    {  
                           }    catch    (javax.crypto.NoSuchPaddingException    e)    {  
                           }    catch    (java.security.NoSuchAlgorithmException    e)    {  
                           }    catch    (java.security.InvalidKeyException    e)    {  
                           }  
                   }  
           
                   public    String    encrypt(String    str)    {  
                           try    {  
                                   //    Encode    the    string    into    bytes    using    utf-8  
                                   byte[]    utf8    =    str.getBytes("UTF8");  
           
                                   //    Encrypt  
                                   byte[]    enc    =    ecipher.doFinal(utf8);  
           
                                   //    Encode    bytes    to    base64    to    get    a    string  
                                   return    new    sun.misc.BASE64Encoder().encode(enc);  
                           }    catch    (javax.crypto.BadPaddingException    e)    {  
                           }    catch    (IllegalBlockSizeException    e)    {  
                           }    catch    (UnsupportedEncodingException    e)    {  
                           }    catch    (java.io.IOException    e)    {  
                           }  
                           return    null;  
                   }  
           
                   public    String    decrypt(String    str)    {  
                           try    {  
                                   //    Decode    base64    to    get    bytes  
                                   byte[]    dec    =    new    sun.misc.BASE64Decoder().decodeBuffer(str);  
           
                                   //    Decrypt  
                                   byte[]    utf8    =    dcipher.doFinal(dec);  
           
                                   //    Decode    using    utf-8  
                                   return    new    String(utf8,    "UTF8");  
                           }    catch    (javax.crypto.BadPaddingException    e)    {  
                           }    catch    (IllegalBlockSizeException    e)    {  
                           }    catch    (UnsupportedEncodingException    e)    {  
                           }    catch    (java.io.IOException    e)    {  
                           }  
                           return    null;  
                   }  
   
   
           //    Here    is    an    example    that    uses    the    class  
           
   public    static    void    main(String    s[])  
   {  
   try    {  
                   //    Create    encrypter/decrypter    class  
                   DesEncrypter    encrypter    =    new    DesEncrypter("crypto");  
           
                   //    Encrypt  
                   String    encrypted    =    encrypter.encrypt("11");  
   System.out.println(encrypted);  
                   //    Decrypt  
                   String    decrypted    =    encrypter.decrypt(encrypted);  
   System.out.println(decrypted);  
           }    catch    (Exception    e)    {e.printStackTrace(); }  
   
   }  
   }