Base32 是一种将二进制数据转换为可打印ASCII字符的编码方式。它的核心规则是:用 32 个字符(一个“字符表”)来表示二进制数据,每个 Base32 字符对应 5 个比特位(bit)。
具体来说,它的编码过程如下:
Base32 使用的字符表通常为 A-Z (26个大写字母) 和 2-7 (6个数字)。有时也会使用小写字母或其他变体。
| 对比维度 | Base32 | Base64 |
|---|---|---|
| 字符表大小 | 32 个字符 | 64 个字符 |
| 每个字符代表位数 | 5 位 | 6 位 |
| 字符表构成 | A-Z 和 2-7 | A-Z、a-z、0-9、+、/ |
| 大小写敏感性 | 不区分大小写(通常使用大写) | 区分大小写 |
| 数据膨胀率 | 编码后数据长度增加约 60% | 编码后数据长度增加约 33% |
| 主要优势 | 高容错性:字符易读、易输入,不易混淆 | 高效率:编码后数据量更小,传输更快 |
| 主要劣势 | 效率较低:数据膨胀率更高,占用更多空间 | 容错性低:包含大小写及特殊字符,易输错 |
| 典型应用场景 | 密钥/令牌分享、URL参数、DNS标签 | 数据传输、邮件附件、图片嵌入 |
尽管 Base64 在效率上更胜一筹,但在一些特定场景下,Base32 的容错性和可读性是更重要的考量因素,这也是它的核心价值所在。
因此,在两步验证(TOTP)的密钥分享、软件授权码、加密货币钱包的助记词等需要人工参与的场景中,Base32 是比 Base64 更合适的选择。