<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    DES 加密工具類(一)

    Posted on 2009-05-29 12:12 Gavin.lee 閱讀(720) 評論(0)  編輯  收藏 所屬分類: java SE & EE
    其實加密算法很多種,在開發過程中并不能全部用到,到目前,還沒用過復雜的對稱加密。基本上加密算法就下面一些,雖然還有好多沒研究過,也貼下來,當參考吧。
        基本的單向加密算法:
    • BASE64 嚴格地說,屬于編碼格式,而非加密算法
    • MD5(Message Digest algorithm 5,信息摘要算法)                         ----非可逆加密
    • SHA(Secure Hash Algorithm,安全散列算法)                                ----非可逆加密
    • HMAC(Hash Message Authentication Code,散列消息鑒別碼)     ----非可逆加密

        復雜的對稱加密(DES、PBE)、非對稱加密算法:
    • DES(Data Encryption Standard,數據加密算法)
    • PBE(Password-based encryption,基于密碼驗證)
    • RSA(算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
    • DH(Diffie-Hellman算法,密鑰一致協議)
    • DSA(Digital Signature Algorithm,數字簽名)
    • ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)

    非可逆加密就是不能解密,其實是不可靠加密。

    DES加密:“ DES算法的入口參數有三個:Key、Data、Mode。其中Key為8個字節共64位,是DES算法的工作密鑰;Data也為8個字節64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密,如果Mode為加密,則用Key去把數據Data進行加密,生成Data的密碼形式作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式作為DES的輸出結果。在使用DES時,雙方預先約定使用的”密碼”即Key,然后用Key去加密數據;接收方得到密文后使用同樣的Key解密得到原數據,這樣便實現了安全性較高的數據傳輸。
    DES的工作原理為:將明文分割成許多64位大小的塊,每個塊用64位密鑰進行加密”

    package com.Gavin.tools.util;

    import
     java.security.Key;   
    import
     java.security.SecureRandom;
    import
     javax.crypto.Cipher;   
    import
     javax.crypto.KeyGenerator;   
    import
     javax.crypto.SecretKey;   
    import
     javax.crypto.SecretKeyFactory;   
    import
     javax.crypto.spec.DESKeySpec; 
    import
     sun.misc.BASE64Decoder;
    import
     sun.misc.BASE64Encoder;  
    /**
     * 
     * @descripte DES coder 
     * 
    @author Gavin.lee
     * @date 2009-6-1 22:19:57
     * 
    @version
     1.0
     
    */

    public abstract class DESCoder{       
        
    public static final String ALGORITHM = "DES";   //指定算法為 DES  

        /**  
         * 轉換密鑰
         
    */
      
        
    private static Key toKey(byte[] key) throws Exception 
    {   
            DESKeySpec dks 
    = new
     DESKeySpec(key);   
            SecretKeyFactory keyFactory 
    =
     SecretKeyFactory.getInstance(ALGORITHM);   
            SecretKey secretKey 
    =
     keyFactory.generateSecret(dks);   
      
            
    //
     當使用其他對稱加密算法時,如AES、Blowfish等算法時,用下述代碼替換上述三行代碼   
            
    // SecretKey secretKey = new SecretKeySpec(key, ALGORITHM);   

      
            
    return
     secretKey;   
        }
       
      
        
    /**  
         * 解密  
         
    */
      
        
    public static byte[] decrypt(byte[] data, String key) throws Exception 
    {   
            Key k 
    =
     toKey(decryptBASE64(key));   
      
            Cipher cipher 
    =
     Cipher.getInstance(ALGORITHM);   
            cipher.init(Cipher.DECRYPT_MODE, k);   
      
            
    return
     cipher.doFinal(data);   
        }
       
      
        
    /**  
         * 加密  
         
    */
      
        
    public static byte[] encrypt(byte[] data, String key) throws Exception 
    {   
            Key k 
    =
     toKey(decryptBASE64(key));   
            Cipher cipher 
    =
     Cipher.getInstance(ALGORITHM);   
            cipher.init(Cipher.ENCRYPT_MODE, k);   
      
            
    return
     cipher.doFinal(data);   
        }
       
      
        
    /**  
         * 生成密鑰  
         
    */
      
        
    public static String initKey() throws Exception 
    {   
            
    return initKey(null
    );   
        }
       
      
        
    /**  
         * 生成密鑰  
         
    */
      
        
    public static String initKey(String seed) throws Exception 
    {   
            SecureRandom secureRandom 
    = null
    ;   
      
            
    if (seed != null
    {   
                secureRandom 
    = new
     SecureRandom(decryptBASE64(seed));   
            }
     else {   
                secureRandom 
    = new
     SecureRandom();   
            }
       
      
            KeyGenerator kg 
    =
     KeyGenerator.getInstance(ALGORITHM);   
            kg.init(secureRandom);   
      
            SecretKey secretKey 
    =
     kg.generateKey();   
      
            
    return
     encryptBASE64(secretKey.getEncoded());   
        }
       
        
        
    public static void main(String args[]) 
    {
            
    try 
    {
                String inputString 
    = "doingjava";    //data

                
                String key 
    = DESCoder.initKey();    //key

                
                
    byte[] inputData =
     inputString.getBytes();
                
                inputData 
    = DESCoder.encrypt(inputData, key);    //encrypt            

                
                System.out.println(DESCoder.encryptBASE64(inputData));    
                
                
    byte[] outputData = DESCoder.decrypt(inputData, key);    //decrypt

                
                System.out.println(
    new
     String(outputData));    
                
                System.out.println(DESCoder.toKey(key.getBytes()).getAlgorithm());    
    //轉義算法密鑰

            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }

        
        
    /**  
         * BASE64解密  
         
    */
      
        
    public static byte[] decryptBASE64(String key) throws Exception 
    {   
            
    return (new
     BASE64Decoder()).decodeBuffer(key);   
        }
       
      
        
    /**  
         * BASE64加密  
         
    */
      
        
    public static String encryptBASE64(byte[] key) throws Exception 
    {   
            
    return (new
     BASE64Encoder()).encodeBuffer(key);   
        }
     
    }
      

    其實這個來自網上,這個比較適合我用,原址:http://snowolf.javaeye.com/blog/380034

    主站蜘蛛池模板: 午夜视频免费成人| 免费观看成人毛片a片2008| 在线A亚洲老鸭窝天堂| av电影在线免费看| 亚洲精品亚洲人成人网| 精品国产免费一区二区三区香蕉| 亚洲精品无码日韩国产不卡?V | 国产亚洲精品a在线观看| a级毛片免费高清视频| 亚洲午夜未满十八勿入网站2| 国产偷伦视频免费观看| 亚洲国产精品自在线一区二区| 99免费观看视频| 亚洲不卡影院午夜在线观看| 日本一道在线日本一道高清不卡免费 | 精品免费久久久久国产一区| 亚洲欧洲精品无码AV| 1000部羞羞禁止免费观看视频| 亚洲午夜电影一区二区三区| 免费高清小黄站在线观看| 猫咪免费观看人成网站在线| 亚洲午夜久久久影院| 波多野结衣中文字幕免费视频 | 日本人护士免费xxxx视频| 一级做a免费视频观看网站| 亚洲成色www久久网站夜月| 巨波霸乳在线永久免费视频| 亚洲乱妇老熟女爽到高潮的片| 四虎影视永久免费观看网址| 97在线视频免费公开视频| 91久久亚洲国产成人精品性色| 成年人在线免费看视频| 黄色一级视频免费观看| 中文字幕亚洲综合久久| 免费观看国产小粉嫩喷水| 免费不卡在线观看AV| 亚洲AV无码一区二区三区牲色| 亚洲宅男天堂在线观看无病毒 | 免费一级毛片免费播放| 麻豆成人久久精品二区三区免费| 含羞草国产亚洲精品岁国产精品 |