Base32解码

按 RFC 4648 把 Base32 串还原成原文,也可以反向把文本编成 Base32。字母表是 A 到 Z 加 2 到 7 共 32 个字符,不含易混的 0、1、8、9;每 5 个字节编成 8 个字符,不足处用等号补到 8 的倍数。默认模式下输入 Hello,编出 JBSWY3DP;把模式切成解码,JBSWY3DP 就还原成 Hello。附完整字母表、14 组用例与 CSV 导出。

5 个字节正好 40 bit,40 bit 分成 8 组各 5 bit,一组一个字符,所以 Hello 编出来是 8 个字符,不用补等号。

默认示例:模式为编码、输入 Hello。输入框被清空时点「开始转换」会自动填回示例;字母表默认显示 12 行,点「加载更多」展开到 32 行。

使用方法

  1. 模式默认「编码(文本 → Base32)」,输入框里已经填好 Hello。改内容立即重算;光标在输入框里按 Ctrl+Enter(Mac 上 Cmd+Enter)同样触发,单独的 Enter 留给换行。
  2. 把模式切成「解码(Base32 → 文本)」,输入 JBSWY3DP 就还原成 Hello。解码时会先剥掉末尾的等号,再按 5 bit 一组切分。
  3. 结果区第一行是「输入 → 输出」并标注字节数与字符数;下面六行是位数换算、字节的十六进制、5 bit 分组数值、字母表与补齐字符数。
  4. 「5 bit 分组」那一行列出每一组的十进制值,拿它去字母表上查,就是输出里的第几个字符。这一行是核对算法最直接的抓手。
  5. 工具区下方是完整的 32 个字符字母表,列出十进制值、字符与 5 位二进制,默认显示 12 行,点「加载更多」展开余下 20 行,点「导出 CSV」存成带字节序标记的文件。
  6. 「复制结果」带走结果区整段;「复制对照表」复制正文里那张 14 组用例表,制表符分隔,可直接粘进表格软件。
  7. 解码时遇到非法字符会指出是第几个字符、是什么字符:小写字母、字母表外的 0/1/8/9、位置不对的等号,各有各的提示。
  8. 输入框被清空时点「开始转换」会按当前模式填回对应示例;本页不联网、不写本地存储,输入内容只用于本次计算。

这个Base32解码工具能解决什么

Base32 常见于一次性口令、DNS 的某些记录、磁力链接与配置文件:一串全大写、末尾带等号的字符。Base32解码这一页做的就是把它还原成能读的文本,或者反过来把文本编成 Base32,并把每个字符是怎么来的摊在结果区里。

第一类是核对一次性口令与密钥。OTP 的密钥常以 Base32 形式发给用户,手抄或复制时少一个字符就对不上。把串粘进来解一次,能立刻看出是字符数不对、还是有非法字符,而不是只能看到「验证失败」四个字。

第二类是处理大小写不敏感的场合。Base32 的字母表只有大写,所以它能安全用在不区分大小写的环境里:某些文件系统、DNS 的 TXT 记录、人工口述的密钥。相对的,Base64 含大小写,经过一次大小写折叠就废了。要判断一段串能不能进这类环境,先看它是不是 Base32。

第三类是排查补齐与分组错误。Base32 每 5 字节一组编成 8 字符,末尾用等号补到 8 的倍数;Base64 是每 3 字节编成 4 字符,补到 4 的倍数。两种补齐规则混在一起就会解出多余的字节。本页在解码前先剥等号,正是为了避开这个坑。

计算原理与变量说明

字母表固定 32 个字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ234567,即 A 到 Z 接 2 到 7。十进制值 0 到 25 是字母,26 到 31 依次是数字 2、3、4、5、6、7。之所以跳过 0、1、8、9,是因为它们与字母 O、I、B、G 手写或口述时容易混,这也是 Base32 相对 Base64 最实际的一个好处。

环节Base32Base64
每字符携带5 bit6 bit
一组字节数5 字节3 字节
一组字符数8 字符4 字符
补齐目标8 的倍数4 的倍数
大小写仅大写大小写都有
膨胀率160%133%

编码是「凑 40 bit 再切 8 刀」。把输入按 UTF-8 变成字节流,每 5 个字节凑成 40 bit,正好切成 8 段各 5 bit,每段查字母表得一个字符。最后一组不足 5 字节时,剩下的 bit 在右侧补 0 到 5 的倍数,照常输出字符,再用等号把总长度补到 8 的倍数。

解码必须先剥等号。等号只是补齐符,不代表任何数据。正确顺序是先把末尾的等号去掉,再把剩下的字符每个折成 5 bit 拼接,然后按 8 bit 一组取字节。顺序反了——先按字符取 5 bit 再丢掉等号——等号会被当成一段有效数据,末尾就多解出几个字节,结果串后面跟着一堆乱码。

最后一组会留残位。1 字节(8 bit)需要 2 个字符承载,剩 2 bit 补 0;2 字节需要 4 字符,剩 4 bit;3 字节需要 5 字符,剩 1 bit;4 字节需要 7 字符,剩 3 bit;5 字节正好 8 字符,不留残位。所以去掉等号后剩下的字符数只能是 2、4、5、7、8 这五种(对 8 取模),出现 1、3、6 就说明串长度不合法。

UTF-8 是字节层面的。中文按 UTF-8 变成 3 个字节,所以「中」编出来是 5 个字符加 3 个等号:3 字节 24 bit,切 5 段各 5 bit,剩 4 bit 补 0。本页手写 UTF-8 编码,不依赖 TextEncoder,沙箱与老浏览器里结果一致。

完整示例(数值仅作演示)

默认一组:编码模式下输入 Hello,字节是 48 65 6c 6c 6f,5 bit 分组为 9 1 18 22 24 27 3 15,查字母表得 JBSWY3DP,8 个字符,不用补等号。

补齐一组:1 字节的 a 编出 ME======(2 字符 + 6 个等号);2 字节 ab 编出 MFRA====;3 字节 abc 编出 MFRGG===;4 字节 abcd 编出 MFRGGZA=;5 字节 abcde 编出 MFRGGZDF,一个等号都不用。6 字节 abcdef 编出 MFRGGZDFMY======,重新开始新的一组。

解码一组:JBSWY3DP 解出 Hello;把 Hello World 编成 JBSWY3DPEBLW64TMMQ====== 再解回来,仍然是 Hello World,往返闭合。3 字节的中文「中」编出 4S4K2===,解回来还是「中」。

字母表与常见字符串编码对照表

下表列出常见字符串编码后的结果,含字节数、位数、Base32 串与补齐的等号个数。5 字节的整数倍不留等号,其余都要补,这一列最能看出补齐规则。「复制对照表」按钮复制的就是这张表。

输入字节数位数Base32 输出等号个数
a18ME======6
ab216MFRA====4
abc324MFRGG===3
abcd432MFRGGZA=1
abcde540MFRGGZDF0
abcdef648MFRGGZDFMY======6
Hello540JBSWY3DP0
Hi216JBUQ====4
foo324MZXW6===3
foob432MZXW6YQ=1
fooba540MZXW6YTB0
foobar648MZXW6YTBOI======6
Hello World1188JBSWY3DPEBLW64TMMQ======6
中3244S4K2===3

完整的 32 个字符字母表在工具区下方:十进制值 0 到 25 对应 A 到 Z,26 到 31 对应 2 到 7。查表时先看 5 bit 分组那一行的十进制值,再按这个值取字符,就能逐字符复算整个编码过程。

结果边界、舍入与适用说明

常见问题

Base32 和 Base64 有什么不一样?

Base32 每字符 5 bit、5 字节编 8 字符、补到 8 的倍数,字母表只有大写;Base64 每字符 6 bit、3 字节编 4 字符、补到 4 的倍数,大小写都有。Base32 膨胀 160%,Base64 膨胀 133%。

为什么字母表跳过 0、1、8、9?

这四个数字手写与口述时容易和 O、I、B、G 混。跳过它们之后字母表只剩 32 个字符,正好是 2 的 5 次方,一个字符承载 5 bit。

结尾的等号有什么用?

只是补齐符,让总长度变成 8 的倍数。它不携带数据,解码前必须先剥掉,否则会被当成有效数据多解出字节。

为什么解出来末尾有乱码?

多半是没先剥等号就按 5 bit 分组解码,把补齐符当成了数据。本页先剥等号再分组,所以不会出现这种尾部杂字节。

「中」编出来为什么有 3 个等号?

「中」按 UTF-8 是 3 个字节共 24 bit,切成 5 组各 5 bit 后剩 4 bit 补 0,得 5 个字符,再补 3 个等号凑到 8 个字符。

小写输入能不能解?

本页不自动转小写,会直接指出第几个字符是小写。人工抄写时大小写出错本身就是常见故障,指出来比静默纠正更有用。

能不能处理带换行的多行输入?

编码模式下换行会被当成普通字符一起编码;解码模式下换行不属于字母表,会被判为非法字符并指出位置。请先自行去掉换行。

输入的数据会上传到服务器吗?

不会。编码、解码、查表与导出都在本页完成,没有发起任何网络请求,也不写入浏览器存储,刷新页面即恢复默认示例。

相关工具