1. Base64简介
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,一种基于64个可打印字符来表示二进制数据的方法。
Base64一般用于在HTTP协议下传输二进制数据,而HTTP是文本协议,所以需要将二进制数据转换为字符数据,但网络传输只能传输可打印字符(ASCALL码中规定,0-31、128这33个字符属于控制字符,32-127这95个字符属于可打印字符)。因此Base64使用64个可打印字符来表示二进制数据,其索引与字符关系对应为:
2. 在Android中使用Base64
Android SDK中已集成Base64工具类(android.util.Base64),使用示例代码如下:
- Base64加密字符串
/**
* Base64加密字符串
* @param content -- 代加密字符串
* @param charsetName -- 字符串编码方式
* @return
*/
private String base64Encode(String content, String charsetName) {
if (TextUtils.isEmpty(charsetName)) {
charsetName = "UTF-8";
}
try {
byte[] contentByte = content.getBytes(charsetName);
return Base64.encodeToString(contentByte, Base64.DEFAULT);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
- Base64解密字符串
/**
* Base64解密字符串
* @param content -- 待解密字符串
* @param charsetName -- 字符串编码方式
* @return
*/
private String base64Decode(String content, String charsetName) {
if (TextUtils.isEmpty(charsetName)) {
charsetName = "UTF-8";
}
byte[] contentByte = Base64.decode(content, Base64.DEFAULT);
try {
return new String(contentByte, charsetName);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
值得注意的是,可通过设置Base64中encode/decode方法的flag参数设置编解码方式,具体定义如下
- DEFAULT:使用默认方法进行编/解码
- NO_PADDING:编码方式,略去输出结果最后的"="
- NO_WRAP:编码方式,略去输出结果中所有的换行符,设置后CRLF无效
- CRLF:编码方式,使用Windows风格的CRLF作为一行的结尾而不是Unix风格的LF
- URL_SAFE:编解码方式,使用"-“和”_“取代”+“和”/"
当和后台小伙伴对接Base64编解码时,最好先沟通好编解码方式,另外还可以通过一些在线网站确认Base64编解码正确与否,比如在线Base64加密解密
参考资料:
什么是Base64
来源:oschina
链接:https://my.oschina.net/u/4380585/blog/4504811