Base64编码原理

Base64编码是基于64个字符A-Z,a-z,0-9,+,/的编码方式,因为2的6次方正好为64,所以就用6bit就可以表示出64个字符,eg:000000对应A,000001对应B。具体对应关系见下表。

字符 对应数字 字符 对应数字 字符 对应数字 字符 对应数字
A 0 Q 16 g 32 w 48
B 1 R 17 h 33 x 49
C 2 S 18 i 34 y 50
D 3 T 19 j 35 z 51
E 4 U 20 k 36 0 52
F 5 V 21 l 37 1 53
G 6 W 22 m 38 2 54
H 7 X 23 n 39 3 55
I 8 Y 24 o 40 4 56
J 9 Z 25 p 41 5 57
K 10 a 26 q 42 6 58
L 11 b 27 r 43 7 59
M 12 c 28 s 44 8 60
N 13 d 29 t 45 9 61
O 14 e 30 u 46 + 62
P 15 f 31 v 47 / 63

BASE64 的编码原理:都是按字符串长度,以每 3 个 字符(1Byte=8bit)为一组,然后针对每组,首先获取每个字符的 ASCII 编码(字符’a’=97=01100001),然后将 ASCII 编码转换成 8 bit 的二进制,得到一组 3 * 8=24 bit 的字节。然后再将这 24 bit 划分为 4 个 6 bit 的字节,并在每个 6 bit 的字节前面都填两个高位 0,得到 4 个 8 bit 的字节,然后将这 4 个 8 bit 的字节转换成十进制,对照 BASE64 编码表 (上表),得到对应编码后的字符。

ASCII对应关系表

ASCII码(十进制) 控制字符 ASCII码(十进制) 控制字符
65 A 97 a
66 B 98 b
67 C 99 c
68 D 100 d
69 E 101 e
70 F 102 f
71 G 103 g
72 H 104 h
73 I 105 i
74 J 106 j
75 K 107 k
76 L 108 l
77 M 109 m
78 N 110 n
79 O 111 o
80 P 112 p
81 Q 113 q
82 R 114 r
83 X 115 s
84 T 116 t
85 U 117 u
86 V 118 v
87 W 119 w
88 X 120 x
89 Y 121 y
90 Z 122 z

转化举例

Tom字符串Base64编码

字符串 T o m  
ASCII 84 111 109  
转化为2进制 01010100 01101111 01101101  
6位切分 010101 000110 111101 101101
10进制 21 6 61 45
Base64字符 V G 9 t

ABCD字符串Base64编码

字符串 A B C D        
ASCII 65 66 67 68        
转化为2进制 01000001 01000010 01000011 01000100 00000000 00000000    
6位切分 010000 010100 001001 000011 010001 000000 000000 000000
10进制 16 20 9 3 17 0 0(异常) 0(异常)
Base64字符 Q U J D R A = =

Base64 python中实现

>>>base64.b64encode(b"ABCD")
b'QUJDRA=='