<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)  編輯  收藏 所屬分類: 代碼庫

    主站蜘蛛池模板: 亚洲娇小性xxxx| 亚洲乱码无限2021芒果| 国产青草亚洲香蕉精品久久| 在人线av无码免费高潮喷水| 99精品热线在线观看免费视频| 亚洲精品高清无码视频| 久久国产精品国产自线拍免费| 国产亚洲精品a在线观看app| 成人性生交大片免费看中文| 亚洲国产综合精品中文第一区| 99热在线观看免费| 亚洲国产精品成人久久久| 无人影院手机版在线观看免费| 亚洲日韩精品无码专区加勒比 | 亚洲国产日产无码精品| 99在线视频免费观看视频 | 亚洲制服丝袜第一页| 女性自慰aⅴ片高清免费| 免费人成动漫在线播放r18| 亚洲无码精品浪潮| 免费国产污网站在线观看| 亚洲伊人久久大香线蕉苏妲己| 97在线观免费视频观看| 精品国产_亚洲人成在线| 日本免费污片中国特一级| 亚洲激情中文字幕| 亚洲免费综合色在线视频| 国产99久久亚洲综合精品| 亚洲人成亚洲人成在线观看| 久久久久久精品成人免费图片| 亚洲人成网站色7799| 国产成人精品亚洲精品| 1000部拍拍拍18勿入免费视频软件 | 国产精品免费在线播放| 无码欧精品亚洲日韩一区| 在线看片无码永久免费视频| 色费女人18女人毛片免费视频| 久久亚洲一区二区| 日本高清免费不卡视频| 国产一区二区三区免费观看在线| 亚洲1区1区3区4区产品乱码芒果 |