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

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

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

    LALA  
    日歷
    <2009年1月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    留言簿(1)

    隨筆分類(31)

    文章分類(4)

    收藏夾(21)

    搜索

    •  

    積分與排名

    • 積分 - 30055
    • 排名 - 1390

    最新隨筆

    最新評(píng)論

    閱讀排行榜

     
    Google Base64可以搜到相關(guān)原理和許多實(shí)現(xiàn)。
    下面是我的實(shí)現(xiàn),和SUN公司提供的參考實(shí)現(xiàn)。
      1 public class Base64 {
      2     static String base64_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      3 
      4     /**
      5      * 編碼原理:將3個(gè)字節(jié)轉(zhuǎn)換成4個(gè)字節(jié)( (3 X 8) = 24 = (4 X 6) )
      6      * 先讀入3個(gè)字節(jié),每讀一個(gè)字節(jié),左移8位,再右移四次,每次6位,這樣就有4個(gè)字節(jié)了
      7      * 
      8      * @param data
      9      * @return 編碼后的Base64字符串
     10      */
     11     public static String Base64Encode(byte[] data) {
     12         StringBuilder builder = new StringBuilder();
     13         int[] temp = new int[4];
     14         int len = data.length - data.length % 3;
     15         for (int i = 0; i < len; i += 3) {
     16             int goal = 0;
     17             for (int j = 0; j < 3; j++) {
     18                 goal <<= 8;
     19                 goal |= (data[i + j] & 0xff);
     20             }
     21             for (int k = 0; k < 4; k++) {
     22                 temp[k] = goal & 0x3f;
     23                 goal >>= 6;
     24             }
     25             for (int k = 3; k >= 0; k--) {
     26                 builder.append(base64_alphabet.charAt(temp[k]));
     27             }
     28         }
     29         int index;
     30         switch (data.length % 3) {
     31         case 1:
     32             index = data[data.length - 1>> 2;
     33             builder.append(base64_alphabet.charAt(index));
     34             index = (data[data.length - 1& 0x03<< 4;
     35             builder.append(base64_alphabet.charAt(index));
     36             builder.append("==");
     37             break;
     38         case 2:
     39             index = data[data.length - 1 - 1>> 2;
     40             builder.append(base64_alphabet.charAt(index));
     41             index = (data[data.length - 1 - 1& 0x03<< 4
     42                     | data[data.length - 1>> 4;
     43             builder.append(base64_alphabet.charAt(index));
     44             index = (data[data.length - 1& 0x0f<< 2;
     45             builder.append(base64_alphabet.charAt(index));
     46             builder.append('=');
     47             break;
     48         }
     49         return builder.toString();
     50     }
     51 
     52     /**
     53      * 解碼原理:將4個(gè)字節(jié)轉(zhuǎn)換成3個(gè)字節(jié). 先讀入4個(gè)6位(用或運(yùn)算),每次左移6位,再右移3次,每次8位.
     54      * 
     55      * @param data
     56      *            需解碼的Base64字符串。
     57      * @return byte[]-解碼出的字節(jié)數(shù)組
     58      */
     59     public static byte[] Base64Decode(String data) {
     60         char[] chArray = data.toCharArray();
     61         int len = chArray.length;
     62         byte[] result = new byte[len * 3 / 4];
     63         for (int i = 0, res_i = 0; i < len; i += 4, res_i += 3) {
     64             int goal = 0;
     65             int index = 0;
     66             for (int k = 0; k < 4; k++) {
     67                 index = base64_alphabet.indexOf(chArray[i + k]);
     68                 goal <<= 6;
     69                 goal |= index;
     70             }
     71             for (int j = 2; j >= 0; j--) {
     72                 result[res_i + j] = (byte) goal;
     73                 goal >>= 8;
     74             }
     75         }
     76         // 等號(hào)=的處理
     77         if (chArray[len - 1!= '=')
     78             return result;
     79         else if (chArray[len - 2== '=')
     80             return Arrays.copyOf(result, result.length - 2);
     81         else
     82             return Arrays.copyOf(result, result.length - 1);
     83 
     84     }
     85 // 將 s 進(jìn)行 BASE64 編碼
     86     public static String getBASE64(String s) {
     87         if (s == null)
     88             return null;
     89         return (new sun.misc.BASE64Encoder()).encode(s.getBytes());
     90     }
     91 
     92     // 將 BASE64 編碼的字符串 s 進(jìn)行解碼
     93     public static String getFromBASE64(String s) {
     94         if (s == null)
     95             return null;
     96         BASE64Decoder decoder = new BASE64Decoder();
     97         try {
     98             byte[] b = decoder.decodeBuffer(s);
     99             return new String(b);
    100         } catch (Exception e) {
    101             return null;
    102         }
    103     }
    104 }


    posted on 2008-12-23 17:36 Dest 閱讀(2088) 評(píng)論(2)  編輯  收藏 所屬分類: Java算法
     
    Copyright © Dest Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 免费人成动漫在线播放r18 | 日韩精品视频免费观看| 亚洲欧美成aⅴ人在线观看| 亚洲国产一级在线观看| 国产麻豆一精品一AV一免费 | 亚洲国产精品成人AV在线| 2022中文字字幕久亚洲| 1区2区3区产品乱码免费| 亚洲AV一区二区三区四区| 亚洲精品无码高潮喷水在线| 日本妇人成熟免费中文字幕| 国产va免费观看| www.亚洲日本| 亚洲国产精品无码久久久秋霞2| 特级做A爰片毛片免费69| 国产精品福利片免费看| 亚洲日本国产综合高清| 亚洲国产精品无码久久久秋霞2| 在线观看亚洲免费| 91精品国产免费久久国语麻豆| 老司机午夜性生免费福利| 亚洲熟妇无码久久精品| 77777亚洲午夜久久多人| 成年丰满熟妇午夜免费视频| 免费精品一区二区三区第35| 美女黄网站人色视频免费| 亚洲伊人精品综合在合线| 国产国拍亚洲精品mv在线观看| 国产精品久久香蕉免费播放| 蜜臀AV免费一区二区三区| 两个人看www免费视频| 猫咪免费人成网站在线观看入口| 亚洲丰满熟女一区二区v| 亚洲国产第一站精品蜜芽| 亚洲精品无码成人片在线观看| 国产精品免费观看久久| 日韩插啊免费视频在线观看| 久久久WWW免费人成精品| 美景之屋4在线未删减免费| 亚洲一区二区无码偷拍| 亚洲免费在线观看视频|