Besa64是一種加料值位加密法,那為什么叫做Base64呢雀扶?因?yàn)闊o(wú)論明文是什么(比如漢字杖小,特殊符號(hào)等)肆汹,加密后的密文都會(huì)變成字母A-Z,a-z,0-9予权,+昂勉,/這64個(gè)字符,被他加密后體積一般會(huì)變成原來(lái)的四分之三扫腺。
前端大部分圖片都是可以轉(zhuǎn)成Base64編碼的圖片岗照,這樣可以減少一個(gè)http請(qǐng)求,但是如果把大圖片編碼到html/css中笆环,會(huì)造成后者體積明顯增加攒至,明顯影響網(wǎng)頁(yè)打開(kāi)速度。如果用外聯(lián)圖片的話躁劣,圖片可以在頁(yè)面渲染完成后繼續(xù)加載迫吐,不會(huì)造成阻塞。如果Base64是被編碼到CSS/JS中账忘,是可以緩存的志膀,因?yàn)镃SS/JS文件可以緩存。使用Base64的另一個(gè)弊端是IE的兼容性問(wèn)題鳖擒。IE以下不支持data url溉浙,IE8開(kāi)始支持data url,卻有大小限制蒋荚。
還有一個(gè)問(wèn)題是戳稽,如果構(gòu)建工具比較落后,手動(dòng)插入Base64是很蛋疼的期升,編輯器會(huì)卡到哭广鳍。
Base64編碼原理
Base64的索引表,字符選用了'A-Z吓妆、a-z赊时、0-9、+行拢、/'64個(gè)可打印字符祖秒。數(shù)值代表字符的索引,這個(gè)是標(biāo)準(zhǔn)Base64協(xié)議規(guī)定的舟奠,不能更改竭缝。64個(gè)字符用6個(gè)bit位就可以全部表示,一個(gè)字節(jié)有8個(gè)bit位沼瘫,剩下2個(gè)bit位就浪費(fèi)掉啦抬纸,這樣就不得不犧牲一部分空間啦。這里需要弄明白的就是一個(gè)Base64字符是8個(gè)bit耿戚,但是有效部分只有右邊的6個(gè)bit湿故,左邊兩個(gè)永遠(yuǎn)是0.
那么怎么用6個(gè)有效bit來(lái)表示傳統(tǒng)字符的8個(gè)bit呢阿趁?8和6的最小公倍數(shù)是24,也就是說(shuō)3個(gè)傳統(tǒng)字符可以由4個(gè)Base64字符來(lái)表示坛猪,保證有效位數(shù)是一樣的脖阵,這樣就多了1/3的字節(jié)數(shù)來(lái)彌補(bǔ)Base64只有6個(gè)有效bit的不足。
Base64編碼可能有點(diǎn)奇怪墅茉,因?yàn)榇蠖鄶?shù)的編碼都是由字符串轉(zhuǎn)化成二進(jìn)制的過(guò)程命黔,而從二進(jìn)制轉(zhuǎn)成字符的過(guò)程稱為解碼。而B(niǎo)ase64的概念就恰好反了就斤,由二進(jìn)制轉(zhuǎn)到字符稱為編碼悍募,有字符到二進(jìn)制稱為解碼。
Base64編碼主要用于傳輸洋机,存儲(chǔ)搜立,表示二進(jìn)制等領(lǐng)域,還可以用來(lái)加密槐秧,單這種加密比較簡(jiǎn)單,只是一眼看上去不知道內(nèi)容罷了忧设,當(dāng)然也可以對(duì)Base64的字符序列進(jìn)行定制來(lái)進(jìn)行加密刁标。