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 

相关文章
相关标签/搜索