Base64是基于64个字符来表示二进制数据的方法。由于2的6次方等于64,所以每6位为一个字符,对应某个字符。在Base64中的表示字符包括A-Z、a-z、0-9,这样共有62个字符,从左往右依次代表0-61,剩下两个字符:+代表62、/代表63。此外还有一个特殊字符=,它的作用稍后再解释。
主要的应用场景:
- 当我们发送一些很小的图片时,并不是发送图片的URL链接给对方,而是对图片本身的字节信息进行Base64编码,然后发送给对方。
- 迅雷等下载工具,会有他们自己特有的下载链接,其实就是把一个URL资源地址加上了某些东西后再进行Base64编码,然后加上thunder://头。
- 用于简单的加密,有的公司会把Base64的字符表示顺序打乱,这样就算别人用Base64进行解码,也不会得到正确的原文。
Android有自己的Base64类,使用方法不同于Java中的Base64:
public static String encodeToString(byte[] src, int flags) // 编码
public static byte[] decode(String encode, int flags) // 解码
flags
:一般使用Base64.DEFAULT
就行,它会在结果尾部加上一个换行符,还有一种模式Base64.NO_WRAP
,则不加换行。
接下来我们来分析下Base64的编码原理。Base64编码时用6位来表示一个字符,而普通的字符为8位,这样就会出现三种情况:
- 原文字符数 % 3 = 0:24bit的整数倍,此时正好分配,
xxxx xx|xx xxxx