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

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

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

    俊星的BLOG

    JAVA MAIL之BASE64編碼解碼

    關于BASE64編碼,建議參看WIKI中的相關說明
    1、編碼:

        public static byte[] base64encode(byte[] inbuf) {
            
    int size = inbuf.length;
            
    byte[] outbuf = new byte[((inbuf.length + 2/ 3* 4];
            
    int inpos, outpos;
            
    int val;
            
    // 情況1:大于等于3
            for (inpos = 0, outpos = 0; size >= 3; size -= 3, outpos += 4{
                val 
    = inbuf[inpos++& 0xff;
                val 
    <<= 8;
                val 
    |= inbuf[inpos++& 0xff;
                val 
    <<= 8;
                val 
    |= inbuf[inpos++& 0xff;
                
    // 到此val中存儲了3*8=24個二進制位,然后分4次,每次6個二進制位輸出
                outbuf[outpos + 3= (byte) pem_array[val & 0x3f];
                val 
    >>= 6;
                outbuf[outpos 
    + 2= (byte) pem_array[val & 0x3f];
                val 
    >>= 6;
                outbuf[outpos 
    + 1= (byte) pem_array[val & 0x3f];
                val 
    >>= 6;
                outbuf[outpos 
    + 0= (byte) pem_array[val & 0x3f];
            }

            
    // 情況2:等于1或者等于2
            if (size == 1{
                val 
    = inbuf[inpos++& 0xff;
                val 
    <<= 4;
                
    // 到此val中實際有效二進制位8+4=12個,并且后4個都為0
                outbuf[outpos + 3= (byte'='// pad character;
                outbuf[outpos + 2= (byte'='// pad character;
                outbuf[outpos + 1= (byte) pem_array[val & 0x3f];
                val 
    >>= 6;
                outbuf[outpos 
    + 0= (byte) pem_array[val & 0x3f];
            }
     else if (size == 2{
                val 
    = inbuf[inpos++& 0xff;
                val 
    <<= 8;
                val 
    |= inbuf[inpos++& 0xff;
                val 
    <<= 2;
                
    // 得到此val中實際有效二進制位為8+8+2=18個,并且后2個為0
                outbuf[outpos + 3= (byte'='// pad character;
                outbuf[outpos + 2= (byte) pem_array[val & 0x3f];
                val 
    >>= 6;
                outbuf[outpos 
    + 1= (byte) pem_array[val & 0x3f];
                val 
    >>= 6;
                outbuf[outpos 
    + 0= (byte) pem_array[val & 0x3f];
            }

            
    return outbuf;
        }


        
    private final static char pem_array[] = 
                
    'A''B''C''D''E''F''G''H'// 0
                'I''J''K''L''M''N''O''P'// 1
                'Q''R''S''T''U''V''W''X'// 2
                'Y''Z''a''b''c''d''e''f'// 3
                'g''h''i''j''k''l''m''n'// 4
                'o''p''q''r''s''t''u''v'// 5
                'w''x''y''z''0''1''2''3'// 6
                '4''5''6''7''8''9''+''/' // 7
        }
    ;

    測試:
        public static void main(String[] args) {
            String [] strs 
    = {"leasure.","easure.","asure.","sure."};
            
    for(String str:strs){
                System.out.println(
    new String(base64encode(str.getBytes())));
            }

        }

    輸出:
    bGVhc3VyZS4=
    ZWFzdXJlLg
    ==
    YXN1cmUu
    c3VyZS4
    =

    2、反編碼:
        public static byte[] base64decode(byte[] inbuf) {
            
    int size = (inbuf.length / 4* 3;
            
    if (inbuf[inbuf.length - 1== '='{
                size
    --;
                
    if (inbuf[inbuf.length - 2== '=')
                    size
    --;
            }

            
    byte[] outbuf = new byte[size];

            
    int inpos = 0, outpos = 0;
            size 
    = inbuf.length;
            
    while (size > 0{
                
    int val;
                
    int osize = 3;
                val 
    = pem_convert_array[inbuf[inpos++& 0xff];
                val 
    <<= 6;
                val 
    |= pem_convert_array[inbuf[inpos++& 0xff];
                val 
    <<= 6;
                
    if (inbuf[inpos] != '='// End of this BASE64 encoding
                    val |= pem_convert_array[inbuf[inpos++& 0xff];
                
    else
                    osize
    --;
                val 
    <<= 6;
                
    if (inbuf[inpos] != '='// End of this BASE64 encoding
                    val |= pem_convert_array[inbuf[inpos++& 0xff];
                
    else
                    osize
    --;
                
    if (osize > 2)
                    outbuf[outpos 
    + 2= (byte) (val & 0xff);
                val 
    >>= 8;
                
    if (osize > 1)
                    outbuf[outpos 
    + 1= (byte) (val & 0xff);
                val 
    >>= 8;
                outbuf[outpos] 
    = (byte) (val & 0xff);
                outpos 
    += osize;
                size 
    -= 4;
            }

            
    return outbuf;
        }


        
    private final static char pem_array[] = 
                
    'A''B''C''D''E''F''G''H'// 0
                'I''J''K''L''M''N''O''P'// 1
                'Q''R''S''T''U''V''W''X'// 2
                'Y''Z''a''b''c''d''e''f'// 3
                'g''h''i''j''k''l''m''n'// 4
                'o''p''q''r''s''t''u''v'// 5
                'w''x''y''z''0''1''2''3'// 6
                '4''5''6''7''8''9''+''/' // 7
        }
    ;

        
    private final static byte pem_convert_array[] = new byte[256];

        
    static {
            
    // 將數組中的每個元素的所有二進制位均初始化為1
            for (int i = 0; i < 255; i++)
                pem_convert_array[i] 
    = -1;
            for (int i = 0; i < pem_array.length; i++)
                pem_convert_array[pem_array[i]] 
    = (byte) i;
        }

    測試:
        public static void main(String[] args) {
            String strs[] 
    = "bGVhc3VyZS4=""ZWFzdXJlLg==""YXN1cmUu""c3VyZS4=" };
            
    for(String str:strs){
                System.out.println(
    new String(base64decode(str.getBytes())));
            }

        }

    輸出:
    leasure.
    easure.
    asure.
    sure.

    posted on 2009-04-23 23:29 俊星 閱讀(770) 評論(0)  編輯  收藏 所屬分類: 代碼庫

    主站蜘蛛池模板: 精品国产麻豆免费网站| 最近中文字幕高清免费中文字幕mv| 黄色片在线免费观看| 亚洲电影在线播放| 亚洲无砖砖区免费| 亚洲综合激情九月婷婷| 无码国产精品一区二区免费 | 可以免费观看的国产视频| 亚洲天堂免费在线视频| 东北美女野外bbwbbw免费| 亚洲色成人WWW永久网站| 成人性做爰aaa片免费看| 亚洲国产精品国自产拍电影| 毛片免费全部播放无码| 亚洲综合国产成人丁香五月激情 | 亚洲理论电影在线观看| 久久永久免费人妻精品| 久久久久久亚洲Av无码精品专口| 国产精品成人免费福利| 亚洲中文字幕无码亚洲成A人片| 成人国产mv免费视频| 成人A毛片免费观看网站| 精品亚洲成AV人在线观看| 中文字幕无码免费久久99| 爱情岛论坛亚洲品质自拍视频网站| 亚洲国产成人精品女人久久久| a级毛片黄免费a级毛片| 亚洲综合久久成人69| 日韩电影免费在线观看视频 | 高清免费久久午夜精品| 亚洲国产精品国自产拍电影| 成人免费无码大片A毛片抽搐色欲| 日韩在线观看免费完整版视频| 亚洲av最新在线网址| 最近中文字幕无免费视频| 一级毛片aaaaaa视频免费看| 亚洲AV无码一区东京热| 在线不卡免费视频| 无码国产精品一区二区免费模式| 亚洲精品乱码久久久久久V| 亚洲日韩精品一区二区三区无码|