1.Base64 能干什么?
转码
图片
装逼
编、解码
2.Base64 是加密算法吗?
不是,是一种编码格式
3.什么情况下,使用Base64?
URL特殊字符,转码,转义
嵌入图片 src="base64编码之后的内容"
4.Base64原理
官方解释:Base64就是使用64个可打印字符来表示二进制数据的方法
理解:把3个8位字节(3*8=24)转换为4个6位得字节(4*6=24),之后在每个6位的前面补两个0,形成8位,即一个字节。再根据每个字节的值,用下表中的值替换,不足四个字节的,补"="
案例:
初始值 11111111 11111111 11111111
转换值 00111111 0011111 00111111 00111111
所以Base64中
min 000000 0
max 111111 63
共需要64个字符
a-z 26
A-Z 26
0-9 10
+/ 2
第一步:找到中文字符在操作系统中对应字符编码表(chcp)GB2312
第二步:中文找到字符编码中的十进制值(参照http://tools.jb51.net/table/gb2312)
计算方式 按照编码表查出左边四位,如升,左边为十六进制C9F0,上面为D,计算方式为将16进制转为10进制 51696 + 13 = 51709
案例:升职加薪 对应为(EXCEL函数=CODE(G15)可快速运算)
升 51709
职 54960
加 48339
薪 53437
第三步:十进制转换为二进制
升 1100100111111101
职 1101011010110000
加 1011110011010011
薪 1101000010111101
第四步:对二进制进行分组,每6个一组,不足6位最后补0
110010 011111 110111 010110 101100 001011 110011 010011 110100 001011 110100
第五步:转为10进制,对应base64编码,结尾 “=”表示结束
50 31 55 22 44 11 51 19 52 11 52
y f 3 W s L z T 0 L 0 =
第六步:验证
public static void main(String[] args) {
BASE64Decoder base64Decoder = new BASE64Decoder();
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
String result = new String(base64Decoder.decodeBuffer("yf3WsLzT0L0="),"GB2312");
System.out.println(result);
//升职加薪
} catch (Exception e) {
e.printStackTrace();
}
}