Base64原理解析
<h2><strong>一. Base64编码由来</strong></h2> <p>为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情 况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生, Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法 。</p> <h2><strong>二.Base的索引表</strong></h2> <p>看一下Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符。数值代表字符的索引,这个是标准Base64协议规定的,不能更改。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/6f75afbfb879381333f2f741070181fb.png"></p> <h2><strong>三.Base64的原理</strong></h2> <p>Base64的码表只有64个字符, 如果要表达64个字符的话,使用6的字节即可完全表示(2的6次方为64)。</p> <p>因为Base64的编码只有6个字节即可表示,而正常的字符是使用8个字节表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascll字符;</p> <p>如果是字符串转换为Base64码, 会先把对应的字符串转换为ascll码表对应的数字, 然后再把数字转换为2进制, 比如a的ascll码味97, 97的二进制是:01100001, 把8个二进制提取成6个,剩下的2个二进制和后面的二进制继续拼接, 最后再把6个二进制码转换为Base64对于的编码, 以下为具体的解析过程案例:</p> <p>把 <strong>abc</strong> 这三个字符转换为Base64的过程</p> <pre> 字符串 a b c ASCII 97 98 99 8bit字节 01100001 01100010 01100011 6bit字节 011000 010110 001001 100011 十进制 24 22 9 35 对应编码 Y W J j </pre> <p>把 <strong>man</strong> 这三个字符转换为Base64的过程</p> <pre> 字符串 m a n ASCII 109 97 110 8bit字节 01101101 01100001 01101110 6bit字节 011011 010110 000101 101110 十进制 27 22 5 46 对应编码 b W F u </pre> <p>现在还有一点小问题,当转换到最后, 最后的字符不足3个字符咋办, 如果不足三个字符的话,我们直接在最后添加=号即可, 具体可以参考以下两个字符串转换案例:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/20f3b04a1ceb713406f98ea983901d9c.png"></p> <p>目前Data URI 支持很多中类型:</p> <pre> 目前,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图片数据 </pre> <p>base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,目前,IE8、Firfox、Chrome、Opera浏览器都支持这种小文件嵌入。</p> <h2><strong>四 参考:</strong></h2> <p>base64的编码原理: <a href="/misc/goto?guid=4959723258534581968" rel="nofollow,noindex">http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html</a></p> <p>base64字节码原理: <a href="/misc/goto?guid=4959723258626639004" rel="nofollow,noindex">http://www.cnblogs.com/chengxiaohui/articles/3951129.html</a></p> <p> </p> <p>来自:http://www.cnblogs.com/diligenceday/p/6002382.html</p> <p> </p>
本文由用户 shh_1014 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!