TOC

Base64

原理

A-Z a-z 0-9 + /, 26 * 2 + 10 + 2 一共 64 个字符,也就是正好六位二进制数。

6:8 = 3:4, 每 3 个字节用 4 个符号表示,会出现两种对不齐的情况:

  1. 如果最后还剩 1 个字节,就会多 2b,转换时需要补充 4 个 0,用 == 表示
  2. 如果最后还剩 2 个字节,就会多 4b,转换时需要补充 2 个 0,用 = 表示

示例

一段数据,比如说 hello world, 一共 11 个字节,直接拿来,二进制表示:

bin        hex
---------  --- 
0110 1000   68
0110 0101   65
0110 1100   6c
0110 1100   6c
0110 1111   6f
0010 0000   20
0111 0111   77
0110 1111   6f
0111 0010   72
0110 1100   6c
0110 0100   64

按六位一个的话就是(PS:后方须补两个 0):

00 01 1010
00 00 0110
00 01 0101
00 10 1100
00 01 1011
00 00 0110
00 11 1100
00 10 0000
00 01 1101
00 11 0110
00 11 1101
00 11 0010
00 01 1011
00 00 0110
00 01 0000

转换成数字:
26 6 21 44 27 6 60 32 29 54 61 50 27 6 16

按照一开始说的字符映射来表达,那就是:
a G V s b G 8 g d 2 9 y b G Q

由于补了两位,加一个等于号,所以就是:
aGVsbG8gd29ybGQ=

验证

echo -n 'hello world' | base64
aGVsbG8gd29ybGQ=