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=='