<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

    主站蜘蛛池模板: 亚洲中文字幕无码久久精品1| 亚洲人成色7777在线观看不卡| 美女视频黄免费亚洲| 女性自慰aⅴ片高清免费| 黄视频在线观看免费| 亚洲日韩在线视频| 亚洲高清最新av网站| 最近中文字幕免费2019| 国产精品亚洲а∨天堂2021| 亚洲AV无码久久寂寞少妇| 青青青青青青久久久免费观看| 中文字幕无线码免费人妻| 亚洲一卡2卡三卡4卡无卡下载| 伊人久久大香线蕉亚洲| 在线观看免费污视频| 日韩免费电影网站| 污视频网站免费观看| 亚洲国产成人在线视频| 亚洲色婷婷一区二区三区| 大学生高清一级毛片免费| 久久久久久国产精品免费免费男同| 亚洲精品GV天堂无码男同| 91亚洲va在线天线va天堂va国产| 亚洲av午夜成人片精品电影| 免费毛片a在线观看67194| a色毛片免费视频| 久久精品国产亚洲av天美18| 亚洲理论在线观看| 国产成人精品日本亚洲网站| 国产又黄又爽又猛的免费视频播放| 精品免费久久久久久久| 中文字幕在线视频免费观看| 日日摸日日碰夜夜爽亚洲| 亚洲乱码一二三四五六区| 亚洲AV无码国产在丝袜线观看| 国产一区二区免费在线| 野花高清在线观看免费3中文| 免费福利在线视频| a级大片免费观看| 久草免费福利在线| 日日狠狠久久偷偷色综合免费|