使用方法
- 模式默认「编码(文本 → Base32)」,输入框里已经填好
Hello。改内容立即重算;光标在输入框里按 Ctrl+Enter(Mac 上 Cmd+Enter)同样触发,单独的 Enter 留给换行。 - 把模式切成「解码(Base32 → 文本)」,输入
JBSWY3DP就还原成 Hello。解码时会先剥掉末尾的等号,再按 5 bit 一组切分。 - 结果区第一行是「输入 → 输出」并标注字节数与字符数;下面六行是位数换算、字节的十六进制、5 bit 分组数值、字母表与补齐字符数。
- 「5 bit 分组」那一行列出每一组的十进制值,拿它去字母表上查,就是输出里的第几个字符。这一行是核对算法最直接的抓手。
- 工具区下方是完整的 32 个字符字母表,列出十进制值、字符与 5 位二进制,默认显示 12 行,点「加载更多」展开余下 20 行,点「导出 CSV」存成带字节序标记的文件。
- 「复制结果」带走结果区整段;「复制对照表」复制正文里那张 14 组用例表,制表符分隔,可直接粘进表格软件。
- 解码时遇到非法字符会指出是第几个字符、是什么字符:小写字母、字母表外的 0/1/8/9、位置不对的等号,各有各的提示。
- 输入框被清空时点「开始转换」会按当前模式填回对应示例;本页不联网、不写本地存储,输入内容只用于本次计算。
这个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 最实际的一个好处。
| 环节 | Base32 | Base64 |
|---|---|---|
| 每字符携带 | 5 bit | 6 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 输出 | 等号个数 |
|---|---|---|---|---|
| a | 1 | 8 | ME====== | 6 |
| ab | 2 | 16 | MFRA==== | 4 |
| abc | 3 | 24 | MFRGG=== | 3 |
| abcd | 4 | 32 | MFRGGZA= | 1 |
| abcde | 5 | 40 | MFRGGZDF | 0 |
| abcdef | 6 | 48 | MFRGGZDFMY====== | 6 |
| Hello | 5 | 40 | JBSWY3DP | 0 |
| Hi | 2 | 16 | JBUQ==== | 4 |
| foo | 3 | 24 | MZXW6=== | 3 |
| foob | 4 | 32 | MZXW6YQ= | 1 |
| fooba | 5 | 40 | MZXW6YTB | 0 |
| foobar | 6 | 48 | MZXW6YTBOI====== | 6 |
| Hello World | 11 | 88 | JBSWY3DPEBLW64TMMQ====== | 6 |
| 中 | 3 | 24 | 4S4K2=== | 3 |
完整的 32 个字符字母表在工具区下方:十进制值 0 到 25 对应 A 到 Z,26 到 31 对应 2 到 7。查表时先看 5 bit 分组那一行的十进制值,再按这个值取字符,就能逐字符复算整个编码过程。
结果边界、舍入与适用说明
- 解码时输入被清空会填回
JBSWY3DP,编码时填回Hello;两边都不输出空结果。 - 字母表外的字符会被逐位指出:出现 0、1、8、9 会说明「这四个数字不在字母表内」,出现小写字母会提示先转大写,出现等号但不在末尾会提示等号位置不对。
- 去掉等号后字符数对 8 取模若为 1、3、6,判定为长度不合法并说明合法余数是 2、4、5、7、0,不强行解出结果。
- 非 ASCII 文本按 UTF-8 编码:汉字一般 3 字节,emoji 4 字节,编码长度按字节数算而不是按字符数算。
- 本页不做换行与空格的自动清理:编码模式下空格与换行会被照常编进去,解码模式下它们会被判为字母表外字符并指出位置。
- 结果里不给「这串是不是某个产品的密钥」之类的判断,只做编码与解码本身;密钥是否有效请回到对应产品验证。
- 字母表固定 32 项,不联网扩展,也不支持 Crockford 等变体字母表(那种变体把 I、L、O、U 另行处理)。
- 页面不上传数据、不写本地存储;导出的 CSV 带字节序标记,Excel 打开不乱码。
常见问题
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 个字符。
小写输入能不能解?
本页不自动转小写,会直接指出第几个字符是小写。人工抄写时大小写出错本身就是常见故障,指出来比静默纠正更有用。
能不能处理带换行的多行输入?
编码模式下换行会被当成普通字符一起编码;解码模式下换行不属于字母表,会被判为非法字符并指出位置。请先自行去掉换行。
输入的数据会上传到服务器吗?
不会。编码、解码、查表与导出都在本页完成,没有发起任何网络请求,也不写入浏览器存储,刷新页面即恢复默认示例。