BASE64
Base64是什么?
Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。值得注意的是Base64不是加密算法,其仅仅是一种编码方式,算法也是公开的,所以不能依赖它进行加密。
为什么叫Base64?
因为它是基于(Base)64个字符的一种编码方式。使用其编码后的文本只包含64个ASCII码字符(偶尔加一个填充字符=),如下所示:
Base64使用到的64个字符:
A-Z 26个
a-z 26个
0-9 10个
+1个
/ 1个
Base64解决什么问题?
Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。
为什么不直接传输二进制呢?比如图片,或者字符,既然实际传输时它们都是二进制字节流。而且即使Base64编码过的字符串最终也是二进制(通常是UTF-8编码,兼容ASCII编码)在网络上传输的,那么用4/3倍带宽传输数据的Base64究竟有什么意义?
真正的原因是二进制不兼容。某些二进制值,在一些硬件上,比如在不同的路由器,老电脑上,表示的意义不一样,做的处理也不一样。同样,一些老的软件,网络协议也有类似的问题。
在项目中,对报文进行压缩、加密后,最后一步一般是 base64 编码。因为 base64 编码的字符串更适合不同平台,不同语言的传输。
Base64 编码的优点:
1.算法是编码,不是压缩,编码后只会增加字节数(一般是比之前的多1/3,比如之前是3, 编码后是4)
2.算法简单,基本不影响效率
3.算法可逆,解码很方便,不用于私密传输。
毕竟编码了,肉眼不能直接读出原始内容。
加密后的字符串只有【0-9a-zA-Z+/=】 不可打印字符(转译字符)也可以传输
所以:Base64就是为了解决各系统以及传输协议中二进制不兼容的问题而生的
BASE64的加密与解密
解密简单地理解:
第一步:把对应字符根据Base64的编码表写出来
第二步:将写出来的由10进制变成六位的二进制,=相当于两个00
第三步:以8个01为一组,组成新的二进制
第四步:将新的二进制变成16进制
第五步:根据ASCII码表将16进制变成最终字符
比如:
加密后:d3lle3dlMWMwbWVfdDBfd3llfQ==
29 55 37 37 30 55 29 37 12 22 12 48 27 22 21 31 29 3 1 31 29 55 37 37 31 16 = =
(011101)(110111) (100101) (100101) (011110) (110111) (011101) (100101) (001100) (010110) (010110) (110000) (011011) (010110) (010101) (011111) (011101) (000011) (000001) (011111) (011101) (110111) (100101) (100101) (011111) (010000)
[01110111] [01110010] [00001000] [01111011] [01110111] [01100101] [00110001] [01100011] [00110000] [01101101] [01100101] [01011111] [01110100] [00110000] [01011111] [01110111] [01111001] [01100101] [011111101]
77 79 65 7b 77 65 31 63 30 6d 65 5f 74 30 5f 77 79 65 fd
w y e { w e 1 c 0 m e _ t 0 _ w y e }
解密后:wye{we1c0me_t0_wye}
反之加密:假设我们要对字符串:1.首先需要找到每个字母对应的ASCII码值
2.字符串首尾相连,形成24位的二进制字符串
3.按照每六位一组,将这个字符串分成四组:
4.再将这些6位字节转换为8位字节,前面加上前缀“00”(两个零):
5.下一步将每个二进制编码从二进制转换为十进制
6.最后按Base64编码索引表,找到对应的字符
比如:
ABC
01000001
01000010
01000011
010000010100001001000011
010000
010100
001001
000011
00010000
00010100
00001001
00000011
16
20
9
3
Q
U
J
D
对应的BASE64编码
20231313 ——>MjAyMzEzMTM=
张景云 ——>5byg5pmv5LqR