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

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

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

    蜀山劍俠
    總結(jié)另外一個人生
    posts - 0,comments - 7,trackbacks - 0

    Java BASE64加密解密

     

    Base64是網(wǎng)絡上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規(guī)范。Base64編碼可用于在HTTP環(huán)境下傳遞較長的標識信息。例如,在Java Persistence系統(tǒng)Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數(shù)。在其他應用程序中,也常常需要把二進制數(shù)據(jù)編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數(shù)據(jù)不會被人用肉眼所直接看到。

     

    RFC2045還規(guī)定每行位76個字符,每行末尾需添加一個回車換行符,即便是最后一行不夠76個字符,也要加換行符。

     

    實現(xiàn)原理

     

    Base64實際上是對二進制碼做分組轉(zhuǎn)換操作

    1.每3個8位二進制碼位一組,轉(zhuǎn)換為4個6位二進制碼為一組(不足6位時地位補0)。3個8位二進制碼和4個6位二進制碼長度都是24位。

    2.對獲得的4個6位二進制碼補位,每個6位二進制碼添加兩位高位0,組成4個8位二進制碼。

    3.將獲得的4個8位二進制碼轉(zhuǎn)換為4個十進制碼。

    4.將獲得的十進制碼轉(zhuǎn)換為Base64字符表中對應的字符。

     

     

     

    字符串“A”,進行Base64編碼,如下所示:

     

    字符                A

    ASCII碼           65

    二進制碼          01000001

     

    4個6位二進制碼 010000          010000

    4個8位二進制碼 00010000       00010000

    十進制碼          16                 16

    字符表映射碼     Q                  Q                   =                 =

     

     

    字符串“A”經(jīng)過Base64編碼后得到字符串“QQ==”。

    結(jié)果出現(xiàn)了兩個等號。很顯然,當原文的二進制碼長度不足24位,最終轉(zhuǎn)換為十進制時也不足4項,這時就需要用等號補位。

    將Base64編碼后的字符串最多會有2個等號,這時因為:

    余數(shù) = 原文字節(jié)數(shù) MOD 3。

     

     

     

     

     

     

     

    字符串“密”,對其使用UTF-8編碼等到Byte數(shù)組{-27,-81,-122},

     

    字符                密

    UTF-8編碼        -27                -81               -122

    二進制碼          11100101       10101111       10000110

    4個6位二進制碼 111001          011010           111110          000110

    4個8位二進制碼 00111001       00011010       00111110       00000110

    十進制碼          57                 26                  62                6

    字符表映射碼     5                   a                   +                 G

     

    字符串“密”經(jīng)過Base64編碼后得到字符串“5a+G”。

     

     

    對照表:

     

     

    索引 對應字符 索引 對應字符 索引 對應字符 索引 對應字符
    0 A 17 R 34 i 51 z
    1 B 18 S 35 j 52 0
    2 C 19 T 36 k 53 1
    3 D 20 U 37 l 54 2
    4 E 21 V 38 m 55 3
    5 F 22 W 39 n 56 4
    6 G 23 X 40 o 57 5
    7 H 24 Y 41 p 58 6
    8 I 25 Z 42 q 59 7
    9 J 26 a 43 r 60 8
    10 K 27 b 44 s 61 9
    11 L 28 c 45 t 62 +
    12 M 29 d 46 u 63 /
    13 N 30 e 47 v    
    14 O 31 f 48 w    
    15 P 32 g 49 x    
    16 Q 33 h 50 y  

     

     java實現(xiàn)

     

    1.JDK實現(xiàn):

    Java代碼  收藏代碼
    1. import sun.misc.BASE64Decoder;     
    2. import sun.misc.BASE64Encoder;     
    3.     
    4. /**   
    5.  * BASE64加密解密   
    6.  */    
    7. public class BASE64     
    8. {     
    9.     
    10.     /**    
    11.      * BASE64解密   
    12.    * @param key          
    13.      * @return          
    14.      * @throws Exception          
    15.      */              
    16.     public static byte[] decryptBASE64(String key) throws Exception {               
    17.         return (new BASE64Decoder()).decodeBuffer(key);               
    18.     }               
    19.                   
    20.     /**         
    21.      * BASE64加密   
    22.    * @param key          
    23.      * @return          
    24.      * @throws Exception          
    25.      */              
    26.     public static String encryptBASE64(byte[] key) throws Exception {               
    27.         return (new BASE64Encoder()).encodeBuffer(key);               
    28.     }       
    29.          
    30.     public static void main(String[] args) throws Exception     
    31.     {     
    32.         String data = BASE64.encryptBASE64("http://aub.iteye.com/".getBytes());     
    33.         System.out.println("加密前:"+data);     
    34.              
    35.         byte[] byteArray = BASE64.decryptBASE64(data);     
    36.         System.out.println("解密后:"+new String(byteArray));     
    37.     }     
    38. }    
    39.    

       注意,sun.misc包是Sun公司提供給內(nèi)部使用的專用API,在java API文檔中我們看不到任何有關BASE64影子,不建議使用。

     

     

    2.Apache的實現(xiàn):(建議使用這種方式,當然,自己實現(xiàn)也可以)

     參考org.apache.commons.codec.binary.Base64
    下載地址:
    http://commons.apache.org/codec/download_codec.cgi

     

    Apache還提供了,非標準的實現(xiàn)方式:

    1.不再添加回車符。

    2.Url Base64,也就是將“+”和“\”換成了“-”和“_”符號,且不適用補位。

    posted on 2012-03-30 16:35 蜀山劍俠 閱讀(50810) 評論(7)  編輯  收藏

    FeedBack:
    # re: Java BASE64加密解密
    2012-12-09 10:49 | gfgfgfg
    hghg  回復  更多評論
      
    # re: Java BASE64加密解密[未登錄]
    2014-06-03 18:13 | 123
    <script>alert('你好')</script>  回復  更多評論
      
    # re: Java BASE64加密解密
    2014-06-27 00:14 | 11
    <h1>呵呵</h1>  回復  更多評論
      
    # re: Java BASE64加密解密
    2014-08-04 17:13 | asdf
    sdf  回復  更多評論
      
    # re: Java BASE64加密解密
    2014-08-04 17:14 | asdf
    &#x003c;&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;&#x003e;&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x0031;&#x0031;&#x0029;&#x003c;&#x002f;&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;&#x003e;  回復  更多評論
      
    # re: Java BASE64加密解密
    2014-08-04 17:14 | asdf
    \x3c\x73\x63\x72\x69\x70\x74\x3e\x61\x6c\x65\x72\x74\x28\x31\x31\x29\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e  回復  更多評論
      
    # re: Java BASE64加密解密
    2014-12-02 16:06 | 11
    <script>alert('你好')</script>  回復  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 国产亚洲日韩在线a不卡| 亚洲男人的天堂久久精品| 视频一区在线免费观看| 精品剧情v国产在免费线观看 | 亚洲日本中文字幕天天更新| 亚洲天堂中文字幕| 暖暖免费在线中文日本| 免费黄色一级毛片| 国产亚洲精品AAAA片APP| 秋霞人成在线观看免费视频| 亚洲一区二区电影| 一级特级女人18毛片免费视频| 99久久精品日本一区二区免费 | 久久永久免费人妻精品| 亚洲AV日韩AV天堂久久| 啦啦啦完整版免费视频在线观看| 亚洲欧洲国产精品久久| a级毛片免费播放| 亚洲精品国产精品乱码不卞| 中文无码亚洲精品字幕| 日韩精品免费电影| 亚洲国产成人私人影院| 国产91色综合久久免费| 亚洲精品成人av在线| 美女视频黄免费亚洲| 亚洲一区免费观看| 成人黄页网站免费观看大全| 边摸边吃奶边做爽免费视频网站| 亚洲成AV人片一区二区密柚| 希望影院高清免费观看视频| 立即播放免费毛片一级| 久久久久亚洲av无码尤物| 最近2019中文字幕mv免费看 | 亚洲国产精品成人AV在线 | 24小时在线免费视频| 亚洲日韩精品无码专区加勒比☆| 亚洲国产精品日韩| 皇色在线视频免费网站| 亚洲一区二区三区免费| 亚洲sss综合天堂久久久| 亚洲免费无码在线|