1. 一文讀懂Base64編碼

        共 2495字,需瀏覽 5分鐘

         ·

        2021-09-14 21:07

        點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

        優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

        Base64編碼

        字符對(duì)應(yīng)表

        上表就是用來(lái)表示Base64,一共64個(gè)字符,A-Z,a-z,0-9,+,/(上表打錯(cuò)了),還有=(作為補(bǔ)位)
        無(wú)論將文件,字符串,還是什么轉(zhuǎn)為Base64,一定是用上表的字符表示。

        轉(zhuǎn)換方式是將三個(gè)字節(jié)分為一個(gè)單元,因?yàn)橐粋€(gè)字節(jié)占8位,所以一個(gè)單元就是24位,然后將一個(gè)單元又分為四個(gè)部分,每一部分 是6位,在每個(gè)部分前面補(bǔ)00,于是一個(gè)單元就變成了32位,也就是4個(gè)字節(jié),然后算出每一部分的十進(jìn)制,再對(duì)應(yīng)Base64字符對(duì)應(yīng)表上面的 符號(hào),一單元的四個(gè)部分加起來(lái)就是Base64,說(shuō)得比較抽象,我們用圖來(lái)說(shuō)話

        如上圖我們對(duì)字符串"LIU"進(jìn)行Base64編碼,因?yàn)閯偤脼?個(gè)字節(jié),所以為一個(gè)單元,LIU對(duì)應(yīng)的ASCII碼為76,73,85,對(duì)應(yīng)的二進(jìn)制分別為 01001100,01001001,01010101,然后將其分為四部分并補(bǔ)0后為,00010011,00000100,00100101,00010101,它們所對(duì)應(yīng)的Base64 索引和字符為,19(T) , 4(E) , 37(l) , 21(V) , 所以"LIU"編譯后的Base64編碼為"TElV"

        如果是兩個(gè)字節(jié)

        兩個(gè)字節(jié)的情況分為三組,第三組只有四位(1001),這時(shí)候要再首尾都加2個(gè)0,為(00100100),計(jì)算出來(lái)是 TEk ,因?yàn)橹挥袃蓚€(gè)字節(jié),所以第三個(gè)用=代替,加上=, 為 TEk=

        如果一個(gè)字節(jié)


        一個(gè)字節(jié)則分為兩組,第二組為00,前面補(bǔ)00,后面補(bǔ)0000,為(00000000),在Base64上面對(duì)應(yīng)A,所以為"TA",因?yàn)闉橐粋€(gè)字節(jié),所以后兩個(gè)用==代替,為 TA==

        漢字轉(zhuǎn)為Base64編碼

        對(duì)于漢字轉(zhuǎn)Base64編碼,首先要確定編碼方式,又utf-8,utf-16,utf-32,gbk等等,每種編碼的漢字對(duì)應(yīng)的Base64是不相同的,比如"劉"的編碼方式為utf-8 ,那么用Base64編碼后為5YiY,如果編碼方式為utf-16,那么經(jīng)過(guò)Base64編碼后為/v9SGA==,所以不同的編碼方式對(duì)應(yīng)不同的Base64編碼, 如果用utf-8編碼的文字轉(zhuǎn)為Base64編碼,用utf-16對(duì)Base64進(jìn)行解碼,那么解碼得到的將為亂碼。

        JAVA API

        編碼

        Base64.getEncoder().encode(byte[] bytes);  
        Base64.getEncoder().encodeToString(byte[] bytes);  
        and so on

        解碼

        Base64.getDecoder().decode(byte[] bytes);  
        and so on

        示例

        /**
         * TODO
         *
         * @author 劉牌
         * @version 1.0
         * @date 2021/9/7 0007 21:25
         */
        public class Base64Test {
            public static void main(String[] args) {
                String str = "LIU";
                String s = Base64.getEncoder().encodeToString(str.getBytes(Charset.forName("utf-16")));
                System.out.println(s);
                byte[] bytes = Base64.getDecoder().decode(s.getBytes());
                String s1 = new String(bytes, Charset.forName("utf-16"));
                System.out.println(s1);
            }
        }


          作者 |  渣男小四

        來(lái)源 |  cnblogs.com/steakliu/p/15240813.html


        加鋒哥微信: java1239  
        圍觀鋒哥朋友圈,每天推送Java干貨!

        瀏覽 55
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 日本少妇被黑人猛cao | 夜夜嗨视频| 中国一级特黄真人毛片60岁 | 九九热精品视频在线 | 中美一级片 |