Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
例如,将字符“AA”编码的过程:
1.A的ASCII码为01000001,AA的二进制为0100000101000001
2.将二进制码每6位分割,得到010000 010100 0001
3.在6位之前加00填充,最后不满6位的末尾加0填充。得到00010000 00010100 00000100
4.将填充后的3个8位二进制按照Base64编码表编码:00010000=Q,00010100=U,00000100=E 得到QUE
5.“AA”为2位字符串,除3余2,补1个=号
最后转码结果为"QUE="
解码过程为编码过程的逆运算。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
Base64编码表
码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 |
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
例如,将字符“AA”编码的过程:
1.A的ASCII码为01000001,AA的二进制为0100000101000001
2.将二进制码每6位分割,得到010000 010100 0001
3.在6位之前加00填充,最后不满6位的末尾加0填充。得到00010000 00010100 00000100
4.将填充后的3个8位二进制按照Base64编码表编码:00010000=Q,00010100=U,00000100=E 得到QUE
5.“AA”为2位字符串,除3余2,补1个=号
最后转码结果为"QUE="
解码过程为编码过程的逆运算。