Base64 编码
Base64 字母表
Base64 编码将一个 8 位字节序列拆成 6 位的片段,并为每个 6 位的片段分配一个字符,这个字符是 Base64 字母表中的 64 个字符之一。
Wert | Zeichen | Wert | Zeichen | Wert | Zeichen | Wert | Zeichen | Wert | Zeichen | Wert | Zeichen | Wert | Zeichen | Wert | Zeichen |
0 | A | 8 | I | 16 | Q | 24 | Y | 32 | g | 40 | o | 48 | w | 56 | 4 |
1 | B | 9 | J | 17 | R | 25 | Z | 33 | h | 41 | p | 49 | x | 57 | 5 |
2 | C | 10 | K | 18 | S | 26 | a | 34 | i | 42 | q | 50 | y | 58 | 6 |
3 | D | 11 | L | 19 | T | 27 | b | 35 | j | 43 | r | 51 | z | 59 | 7 |
4 | E | 12 | M | 20 | U | 28 | c | 36 | k | 44 | s | 52 | 0 | 60 | 8 |
5 | F | 13 | N | 21 | V | 29 | d | 37 | l | 45 | t | 53 | 1 | 61 | 9 |
6 | G | 14 | O | 22 | W | 30 | e | 38 | m | 46 | u | 54 | 2 | 62 | + |
7 | H | 15 | P | 23 | X | 31 | f | 39 | n | 47 | v | 55 | 3 | 63 | / |
Base64 编码实例
上图显示了一个简单的 Base64 编码实例。在这里,三个字符串组成的输入值“Ow!”是 Base64 编码的,得到的是 4 个字符的 Base64 编码值“T3ch”。它是按以下方式工作的。
- 字符串“Ow!”被拆分成 3 个 8 位的字节(0x4F、0x77、0x21)。
- 这 3 个字节构成了一个 24 位的二进制值 010011110111011100100001。
- 这些位被划分成为一些 6 位的序列 010011、110111、01110、100001。
- 每个 6 位值都表示了从 0~63 之间的一个数字,对应 Base64 字母表 64 个字符之一。得到的 Base64 编码字符串是个 4 位字符的字符串“T3ch”。
Base64 填充
Base64 编码收到一个 8 位字节序列,将这个二进制序列流划分成 6 位的块。二进制序列有时不能正好平均分成 6 位的块,在这种情况下,就在序列末尾填充零位,使二进制序列的长度成为 24 的倍数(6 和 8 的最小公倍数)。对已填充的二进制串进行编码时,任何完全填充(不包含原始数据中的位)的 6 位组都由特殊的第 65 个符号 “=” 表示。如果 6 位组是部分填充的,就将填充位设置为 0。
上图显示了一个填充实例。初始输入字符串为 “a:a”为 3 字节(24位)。24 是 6 和 8 的倍数,因此无需填充,得到 Base64 编码字符串为 “YTph”。然而,再增加一个字符,输入字符串会变成 32 位长。而 6 和 8 的下一个公倍数是 48,因此要添加 16 位 填充码。填充的前 4 位是与数据位混合在一起的。得到的 6 位组是 01xxxx,会被当作 010000、十进制中的 16,或者 Base64 编码的 Q 来处理。剩下的两个 6 位组都是填充吗,用 “=”表示。
URL安全的 Base64 编码
先将内容以 Base64 编码,然后检查结果字符串,将字符串中的 “+” 替换成 “-”、“/” 替换成 “_”,同时省略尾部的填充符号 “=”。