base64編碼原理

最近在作將文件轉成base64編碼,並保存在文件中。編碼後的文件比編碼前的文件大1/3。因而研究了一下base64編碼的原理。html

base64編碼的由來

咱們在經過網絡傳輸文件時,並非全部的字節均可以傳輸的。如咱們在發送郵件時,只支持可見字符的傳送,像ASCII碼的控制字符不能經過郵件發送;圖片的二進制流並非每一個字節都是可見字符。網絡

這時候咱們須要把不可見字符轉換爲可見字符。因而就有了base64編碼,Base64就是一種基於64個可打印字符來表示二進制數據的表示方法。編碼

base64編碼原理

 看一下Base64的索引表,字符選用了"A-Z、a-z、0-九、+、/" 64個可打印字符。數值表明字符的索引,這個是標準Base64協議規定的,不能更改。64個字符用6個bit位就能夠所有表示,一個字節有8個bit位,剩下兩個bit就浪費掉了,這樣就不得不犧牲一部分空間了。這裏須要弄明白的就是一個Base64字符是8個bit,可是有效部分只有右邊的6個bit,左邊兩個永遠是0。htm

 

 如何將字符轉換爲base64編碼,首先咱們來看個例子,更容易理解blog

 

 首先咱們將字符轉換爲二進制,將二進制數據分割,每6位分割成base64的有效爲,而後在前補0,將補0 後的8位二進制轉爲十進制數據,十進制數據就是base64編碼的索引,根據索引查找對應的編碼便可。索引

8和6的最小公倍數是24,也就是說3個傳統字節能夠由4個Base64字符來表示,保證有效位數是同樣的,這樣就多了1/3的字節數來彌補Base64只有6個有效bit的不足。所以文件的大小也增長1/3。圖片

原則是Base64字符的最小單位是四個字符一組,那這才兩個字符,後邊補兩個"="吧。其實不用"="也不耽誤解碼,之因此用"=",多是考慮到多段編碼後的Base64字符串拼起來也不會引發混淆。因而可知Base64字符串只可能最後出現一個或兩個"=",中間是不可能出現"="的。文檔

本文參考文檔:http://www.javashuo.com/article/p-rlivfogw-ep.html字符串

相關文章
相關標籤/搜索