Base64原理解析

   一. Base64編碼由來

  爲何會有Base64編碼呢?由於有些網絡傳送渠道並不支持全部的字節,例如傳統的郵件只支持可見字符的傳送,像ASCII碼的控制字符就 不能經過郵件傳送。這樣用途就受到了很大的限制,好比圖片二進制流的每一個字節不可能所有是可見字符,因此就傳送不了。最好的方法就是在不改變傳統協議的情 況下,作一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。Base64編碼應運而生,Base64就是一種 基於64個可打印字符來表示二進制數據的表示方法javascript

  二.Base的索引表

  看一下Base64的索引表,字符選用了"A-Z、a-z、0-九、+、/" 64個可打印字符。數值表明字符的索引,這個是標準Base64協議規定的,不能更改。css

   三.Base64的原理

  Base64的碼錶只有64個字符, 若是要表達64個字符的話,使用6的bit便可徹底表示(2的6次方爲64)。html

  由於Base64的編碼只有6個bit便可表示,而正常的字符是使用8個bit表示, 8和6的最小公倍數是24,因此4個Base64字符能夠表示3個標準的ascll字符;java

  若是是字符串轉換爲Base64碼, 會先把對應的字符串轉換爲ascll碼錶對應的數字, 而後再把數字轉換爲2進制, 好比a的ascll碼味97, 97的二進制是:01100001, 把8個二進制提取成6個,剩下的2個二進制和後面的二進制繼續拼接, 最後再把6個二進制碼轉換爲Base64對於的編碼, 如下爲具體的解析過程案例:git

  把abc這三個字符轉換爲Base64的過程github

字符串      a       b        c
ASCII      97      98       99
8bit   01100001 01100010 01100011
6bit   011000   010110   001001   100011
十進制      24      22        9        35
對應編碼    Y        W        J        j

  把man這三個字符轉換爲Base64的過程瀏覽器

字符串    m         a        n
ASCII    109       97       110
8bit  01101101 01100001 01101110
6bit  011011   010110   000101     101110
十進制     27       22       5         46
對應編碼   b        W        F          u

  如今還有一點小問題,當轉換到最後, 最後的字符不足3個字符咋辦, 若是不足三個字符的話,咱們直接在最後添加=號便可, 具體能夠參考如下兩個字符串轉換案例:微信

  目前Data URI 支持不少中類型:網絡


複製代碼
  目前,Data URI scheme支持的類型有:
  data:,文本數據
  data:text/plain,文本數據
  data:text/html,HTML代碼
  data:text/html;base64,base64編碼的HTML代碼
  data:text/css,CSS代碼
  data:text/css;base64,base64編碼的CSS代碼
  data:text/javascript,Javascript代碼
  data:text/javascript;base64,base64編碼的Javascript代碼
  data:image/gif;base64,base64編碼的gif圖片數據
  data:image/png;base64,base64編碼的png圖片數據
  data:image/jpeg;base64,base64編碼的jpeg圖片數據
  data:image/x-icon;base64,base64編碼的icon圖片數據
複製代碼

  base64簡單地說,它把一些 8-bit 數據翻譯成標準 ASCII 字符,目前,IE八、Firfox、Chrome、Opera瀏覽器都支持這種小文件嵌入。網站

 

  四 參考:

  base64的編碼原理:http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html

  base64字節碼原理:http://www.cnblogs.com/chengxiaohui/articles/3951129.html

做者: NONO
出處:http://www.cnblogs.com/diligenceday/
企業網站:http://www.idrwl.com/
開源博客:http://www.github.com/sqqihao
QQ:287101329
微信:18101055830 

相關文章
相關標籤/搜索