Base64简介

Base64编码介绍

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。

比如三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。完整的base64定义可见RFC 1421和RFC 2045。编码后的数据比原始数据略长,为原来的4/3。所以当原有数据不是3字节的倍数时,会将二进制数据后补0,凑够三个字节,转换为4个Base64单元,都是补位的则用个=替代一个Base64单元。当原数据长度不是3的整数倍时,如果最后剩下一个输入数据,在编码结果后加2个“=”;如果最后剩下两个输入数据,编码结果后加1个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证数据还原的正确性。(见下面的编码过程)

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email、在XML中存储复杂数据。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。   

为什么使用 Base64

  • base64不是安全领域下的加密解密算法。能起到安全作用的效果很差,而且很容易破解,他核心作用应该是传输数据的正确性,有些网关或系统只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据。

  • Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

  • 在前端应用:将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页、编辑器中。 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地方。

  • 在电子邮件传输中的应用,见下文。

base64编码过程

Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。

具体参见文中的图:http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
文中的图清晰明了。

url base64

为解决在base64后的字符在url中正常使用,可采用一种用于URL的改进Base64编码,它不在末尾填充’=’号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

MIME base64

jdk8中提供了Base64类,实现了基本的base64,url Base64 和 mime Base64
mime Base64 用在邮件传输中,在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。需要注意的是在电子邮件中,根据RFC 822规定,每76个字符,还需要加上一个回车换行。

思考

base64 怎么编码中文的,utf-8中,一个汉字占3个字节

参考资料

Base64 wikipedia
Java 8新特性探究(十一)Base64详解