🔢 Base32编码
RFC 4648 · 文本↔Base32 · 编码/解码
RFC 4648 · 文本↔Base32 · 编码/解码
Base32用32个字符(A-Z和2-7),每5位编码一个字符,膨胀率约60%;Base64用64个字符,每6位编码一个字符,膨胀率约33%。Base32不区分大小写、更易读写,但更占空间。
RFC 4648的Base32用A-Z(26个)+2-7(6个)=32个字符。排除0、1、8、9是为了避免和字母O、I、B、G在视觉上混淆,提高人工可读性。
输入按5字节(40位)分组,每组输出8个Base32字符。不足5字节时用0补齐位,末尾用"="填充。比如1字节输入输出2个字符+6个"="。
每5个bit编码成1个字符(8位),等于把5位"摊"成8位存储,所以输出长度 = 输入bit数÷5。相比原文,ASCII文本膨胀约1.6倍,即约+60%。
常见于OTP动态口令(TOTP/HOTP种子密钥)、DNS安全协议(DNSSEC的密钥指纹)、密钥管理、以及一些需要人工抄写的编码场景,因为不含易混淆字符。
不区分。字母表全是大写A-Z,解码时通常会把小写转成大写处理。所以同一串Base32,大小写混写也不影响解码结果。
能。工具先把中文按UTF-8转成字节序列,再按Base32规则编码。因为中文一个汉字占3字节,编码后长度会更长。
不是。Base32只是编码(可逆的格式转换),不提供任何安全性。任何人都能解码,别用它保护敏感信息,机密数据要用AES等加密算法。
Base32采用基数为32的编码:把输入字节转为二进制位流,每5位对应一个字符(2^5=32)。字符表固定为A-Z和2-7。
| 值 | 字符 | 值 | 字符 |
|---|---|---|---|
| 0 | A | 1 | B |
| 2 | C | 3 | D |
| 4 | E | 5 | F |
| 6 | G | 7 | H |
| 8 | I | 9 | J |
| 10 | K | 11 | L |
| 12 | M | 13 | N |
| 14 | O | 15 | P |
| 16 | Q | 17 | R |
| 18 | S | 19 | T |
| 20 | U | 21 | V |
| 22 | W | 23 | X |
| 24 | Y | 25 | Z |
| 26 | 2 | 27 | 3 |
| 28 | 4 | 29 | 5 |
| 30 | 6 | 31 | 7 |
5字节(40位)正好分成8组5位,所以输入按5字节分组最干净。
理解了位数和分组,就能手工校验任何Base32结果。
| 编码 | 字符集 | 每字符位数 | 膨胀率 | 特点 |
|---|---|---|---|---|
| Base32 | A-Z,2-7 | 5位 | 约60% | 不区分大小写、易读写 |
| Base64 | A-Z,a-z,0-9,+,/ | 6位 | 约33% | 紧凑,但含+/= |
| Base58 | 去0OIl的58字符 | 约5.86位 | 约40% | 比特币地址、短链 |
选哪种取决于需求:追求紧凑选Base64,追求可读选Base32,追求去混淆选Base58。
Base32本身不加密,但它常和加密、认证配合:OTP动态口令的种子密钥通常以Base32形式分发给用户,用户扫码或手动输入后,配合时间戳生成一次性密码。这种方式用户手工录入方便,且不易输错。
| 输入字节数 | 输出字符数 | =填充数 |
|---|---|---|
| 1 | 2 | 6 |
| 2 | 4 | 4 |
| 3 | 5 | 3 |
| 4 | 7 | 1 |
| 5 | 8 | 0 |
| 10 | 16 | 0 |
| 编码 | 结果 |
|---|---|
| Base32 | MZXW6YTBOI====== |
| Base64 | Rk9PQkFS |
| Hex | 464f4f424152 |
1. 在左侧输入原始文本或Base32编码文本。
2. 点击"编码"或"解码"。
3. 结果自动显示在右侧。