Skip to main content
CheckTown
开发工具

Base32 编码:完全指南

发布于 阅读约 5 分钟
本文目录

什么是 Base32?

Base32 是一种在 RFC 4648 中定义的二进制转文本编码方案,它使用一组 32 个字符(A-Z 和 2-7)来表示二进制数据。与 Base64 不同,Base32 只使用大写字母和数字,因而不区分大小写,便于人工输入。

Base32 生成的输出比 Base64 更长(约 60% 的开销,而 Base64 约为 33%),但换来的是更好的可读性,以及对不区分大小写、或禁止使用 + 和 / 等特殊字符的系统的兼容性。

Base32 编码的工作原理

Base32 将每 5 个字节(40 位)的分组转换为 8 个 Base32 字符(每个 5 位),当输入长度不是 5 的倍数时,用 = 字符进行填充。

  • 5 位分组 —— 输入字节被切分为 5 位一组的块,每一块映射到 A-Z、2-7 字母表中的 32 个字符之一
  • 填充 —— 用 = 字符对输出进行填充,确保长度始终是 8 个字符的倍数
  • 变体 —— Base32Hex 使用 0-9、A-V,而非 A-Z、2-7,以保留编码数据的排序顺序

免费试用 —— 无需注册

编码或解码 Base32 →

何时使用 Base32

在大小写敏感性、可读性或字符限制很重要的场景中,Base32 比 Base64 更受青睐。

  • TOTP 密钥 —— Google Authenticator 等身份验证器应用使用 Base32 编码的密钥,因为用户可能需要手动输入它们
  • Crockford 编码 —— 一种 Base32 变体,移除了容易混淆的字符(I、L、O、U),以生成更清晰、便于人工阅读的标识符
  • DNS 和文件系统 —— Base32 可在不区分大小写的环境中工作,而 Base64 的大小写混合字母表在这类环境中会引发冲突

常见问题

Base32 和 Base64 有什么区别?

Base32 使用 32 个字符(A-Z、2-7),生成的输出大约大 60%;而 Base64 使用 64 个字符(A-Z、a-z、0-9、+、/),开销约为 33%。Base32 不区分大小写,且避免使用特殊字符,因此更适合人工输入和不区分大小写的系统。

为什么身份验证器应用使用 Base32 而非 Base64?

身份验证器应用使用 Base32,是因为用户有时需要手动输入密钥。Base32 仅含大写字母的字母表避免了外形相似字符之间的混淆(如小写 L 和数字 1),并且在不区分大小写的系统之间复制时也能可靠工作。

什么是 Base32Hex,我应该在什么时候使用它?

Base32Hex(也称 base32hex 或扩展十六进制)使用字符 0-9 和 A-V,而非标准的 A-Z、2-7 字母表。编码后它能保留原始二进制数据的字典序排序顺序,这对数据库索引和有序数据结构很有用。

相关工具