什么是Base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。
很多人把他叫做Base64加密,其实Base64不是一种加密方式,并不能起到加密的效果,它只是一种编码方式。Base64是基于以下64个可见字符实现的,所以叫Base64。
Base64编码的作用
Base64编码在实际开发中有相当广泛的用途
在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。
对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。
Base64编码在Android中的使用
Adroid中通过Base64类直接实现Base64的编码和解码
String strEncode = Base64.encodeToString("Hello WuXiaAChao!".getBytes(), Base64.DEFAULT);
String strDecode = new String(Base64.decode(strEncode, Base64.DEFAULT));
Base64--编码后数据: SGVsbG8gV3VYaWFBQ2hhbyE=
Base64--解码后数据: Hello WuXiaAChao!
Adroid中Base64.DEFAULT参数说明
- DEFAULT 这个参数是默认,使用默认的方法来加密
- NO_PADDING 这个参数是略去加密字符串最后的”=”
- NO_WRAP 这个参数意思是略去所有的换行符(设置后CRLF就没用了)
- CRLF 这个参数是Win风格的回车换行符,意思就是使用CR(回车)LF(换行)这一对作为一行的结尾,而不是Linux/Unix风格的LF(换行)
- URL_SAFE 这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/
Base64编码的实现
Base64是3个字节一组,最后变成4个可见字符。具体实现是:
- 先将3个字符转换ASCII码的二进制共24 bit
- 再将24 bit按6 bit一组分成4组
- 每组的高位补两个0,变成4个字节
- 最后对照Base64字符表转成对应的4个字符
如果目标字符不是3的倍数,多出一个字节的分成6 bit和2 bit两组,2 bit低位补4个0变成6 bit,两组再高位补两个0,最后转成2个Base64字符。因为Base64字符是4个,最后补两个等号,如"a"的Base64编码是"YQ=="。多出两个字符的也是类似处理,不足一组的低位补足6位,再高位补两个0转成Base64编码,最后不足4个的补等号,如"ab"的Base64编码是"YWI="。