base64

base64

百度百科:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。

所有的数据都能被编码为并只用65个字符{‘A’~‘Z’ , ‘a’ ~ ‘z’ , ‘+’ , ‘/’ ,’=’ }就能表示的文本文件,实际上base64对应的编码字母表只有64个{‘A’~‘Z’ , ‘a’ ~ ‘z’ , ‘+’ , ‘/’ },‘=‘只是一个占位符。

转换步骤:

第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
第二步,将上面的24个二进制位每6个一组,共分为4组。
第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共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

用3个字节一组呢?因为6和8的最小公倍数为24,三个字节正好24个二进制位,每6个bit位一组,恰好能够分为4组。

有时候会出现所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节,这时在最后一组填充1到2个0字节,并在最后编码完成后在结尾添加1到2个=号。

举个例子

比如halo这个单词

对应的ASCII码值分别为:68 61 108 111
转换成二进制:‭
01000100‬ ‭00111101 ‭01101100 ‭01101111
对前3个字节进行操作,划分为6bit一个字节:
010001 000011 110101 101100
高位补0:
00010001 00000011 00110101 00101100
转换成十进制:
17 ,3 ,53,44
对应于base64的编码为:RD1s

由上面发现,原数据的每3个字节经过base64的转换后都会变成4个字节。因此,Base64编码之后的文本,要比原文大约三分之一。

再下一组,发现只有1个字节(01101111),凑不够3个字节,经转换的base64的二进制编码为
00011011 00110000
低位,此时后面还有两个字节用“=”补上,所以最后的base64编码为 bw==

‬‬‬

延申

base64取的是6位(26),同理,base32取的是5位(25),base16取4位,对应于16进制。

参考了很多资料,我也忘了出自哪。如果有什么错误,望各位指正,不胜感激。

你可能感兴趣的:(base64)