Base64算法,是用64个可打印字符表示二进制所有数据方法。Base64字符成包含A—Z,a—z,0—9,+,/ ,他们编码对应表如下。
一个Base64字符编码转换成二进制都是8个bit位,而前两位都00,有效数字只有6个bit位,也就是说只需要6个bit位就能表示1个Base64字符,而正常的字符是使用8个bit位表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascii字符。
按照以上原理,我们将要加密的明文对应的ascii值转换成二进制并拼接在一起,将其分为每6个bit为一份,每4份为一组。不够6个bit位的用0补充,不够4份的用=补充。根据base64编码表将每一份转成对应的Base64字符,得到的也就是密文。
java中早已提供以上算法的jar包,不用自己去实现以上算法,个人倾向使用apache提供的
import org.apache.commons.codec.binary.Base64;
private static final String ENCODING_UTF8 = "UTF-8";
/**
* 二进制数据编码为BASE64字符串,根据isChunked是否输出换行
*/
public static String encodeBase64(byte[] bytes, boolean isChunked) {
try {
return new String(Base64.encodeBase64(bytes, isChunked), ENCODING_UTF8);
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage(), e);
return "";
}
}
/**
* BASE64解码
*/
public static byte[] decodeBase64(String encodedStr) {
byte[] result;
try {
result = Base64.decodeBase64(encodedStr);
} catch (Exception e) {
logger.error(e.getMessage(), e);
return null;
}
return result;
}
ASCII码总共128个,用来表示英文字母、数字以及英文标点符号。而简体中文、繁体中文、日文以及韩文等都是用多字节来存储的,通常称之为多字节字符。因为Base编码的输入是字符串的编码,不同编码的字符串的Base64结果是不同的。
个人觉得用base64传输缩略图,非常合适,客户端收到base64字符后,就可以显示图片,而不用依赖网络了。这样至少可以保证缩略图一定能显示出来。但是通过以上算法,可以发现base64后的字符串大小是原来的4/3.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。