Base32 编码器和解码器

Base32 使用 32 个字符表示二进制数据,数字 2-7 和 26 个大写字母,不包含 0/O 或 1/I,以避免读错。这让它非常适合任何需要人类输入或朗读的内容:双因素 TOTP 密钥、兑换码、大小写不敏感的标识符。这个工具会把文本编码为 Base32,也能解码回来,遵循 RFC 4648 并使用标准的 = 填充。

如何编码或解码 Base32

  1. 1

    粘贴要转换的文本

    输入会按字节处理。文本输入默认解释为 UTF-8。

  2. 2

    选择方向

    编码会把原始字节变成 Base32 字符串;解码会恢复字节。

  3. 3

    注意填充行为

    RFC 4648 会用 `=` 把编码结果补齐到 8 的倍数。解码器同时接受带填充和不带填充的输入。

  4. 4

    复制结果

    编码输出为大写,并用 `=` 填充到 8 的倍数。

RFC 4648 字母表

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 2 3 4 5 6 7

没有 0,没有 1,没有 8,没有 9。每个字符编码 5 位(2^5 = 32),因此 5 个输入字节会变成 8 个输出字符。

示例

编码 ASCII 字符串 foo(字节 0x66 0x6F 0x6F = 01100110 01101111 01101111):

  1. 分成 5 位一组:01100 11001 10111 10110 1111(最后一组进行填充)
  2. 映射到字母表:M Z X W 6
  3. 加上 === 填充凑足 8 个字符:MZXW6===

填充和长度规则

输入字节数 输出长度 填充
1 8 ======
2 8 ====
3 8 ===
4 8 =
5 8 (无)

RFC 4648 之外的变体

  • Base32 Hex,字母表 0-9A-V,DNSSEC 中的 NSEC3 使用。
  • Crockford’s Base32,针对人工输入优化的字母表;解码时把 O0I/L1。ULID 和一些许可证密钥使用。

此工具只实现标准 RFC 4648;上述变体请使用专门的转换工具。

TOTP 密钥

Google Authenticator 和每个现代 2FA 应用使用的 otpauth:// URI 格式,会把共享密钥编码为不带填充的 Base32。当你为 “My Service” 扫描二维码时,secret= 参数就是 Base32 字符串。用这个工具解码它,就能查看 HMAC 使用的原始字节。

常见问题

Base32 大小写不敏感,并避开容易混淆的字符,这对任何人类要读取或输入的内容都很重要。Base64 更紧凑(同样的字节用更少字符),但需要区分 Il0O,手写和小字号时容易失败。

RFC 4648 规定编码时需要填充。这个工具总会用 = 把编码结果补齐到 8 的倍数。多数实际使用方(TOTP 应用、ULID 库、DNSSEC 解析器)都接受不带填充的输入,这里的解码器也同时接受带填充和不带填充两种形式。

标准 Base32 没有 0、1、8 或 9,并且始终是大写。解码器会静默忽略 RFC 4648 字母表之外的任何字符,因此包含小写字母或特殊字符的输入会解码出错误的字节。解码前请把输入规范为大写字母 A-Z 和数字 2-7

会。文本会发送到页面的服务器以便计算结果,在多步骤视图中,同样的文本也会出现在步骤链接里。它不会被存储或记录。

相关工具

此工具还提供其他语言版本