一、Base64概念
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。
二、Base64作用
我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。
base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输,base64特别适合在http,mime协议下快速传输数据。
三、Base64原理
Base64的原理很简单,所谓Base64,就是说选出64个字符(小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/")作为一个基本字符集。然后,准备一个包含64个字符的数组,最后其他所有符号都转换成这个字符集中的字符。数组:
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']复制代码
转换过程
具体来说,转换方式可以分为四步,如图所示:
第一步,将每三个字节作为一组,一共是24个二进制位。
第二步,将这24个二进制位分为四组,每个组有6个二进制位。
第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。
第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y
实践
把abc这三个字符转换为Base64的过程:
字符串 a b c
ASCII 97 98 99
8bit 01100001 01100010 01100011
6bit 011000 010110 001001 100011
十进制 24 22 9 35
对应编码 Y W J j复制代码
因此“abc”的base64编码是:YWJj
把"严"这个字符转换为Base64的过程:
"严"的utf-8编码为E4B8A5,写成二进制就是三字节的"11100100 10111000 10100101"
字符串 严
8bit 11100100 10111000 10100101
6bit 00111001 00001011 00100010 00100101
十进制 57 11 34 37
对应编码 5 L i l复制代码
因此“严”的base64编码是:5Lil
现在还有一点小问题,当转换到最后, 最后的字符不足3个字符咋办, 如果不足三个字符的话,我们直接在最后添加=号即可, 具体可以参考以下两个字符串转换案例:
因而 A的base64编码是: QQ==