跳到正文
BCBinary Code Translator
菜单

RFC 4648 编码工具

Base32 编码 / 解码器

将 UTF-8 文本转换为 RFC 4648 Base32,也可解码回文本;支持等号填充开关、严格字母表检查和未使用位校验。

所有字节都在当前设备处理,页面不会把转换内容发送到外部服务。

转换方向
0 个字符
0 个字符

转换仅在当前浏览器本地执行,输入不会上传。

尚无结果。

什么是 RFC 4648 Base32

Base32 是一种二进制到文本的编码,使用 A-Z 和数字 2-7 表示任意字节。每个输出字符承载 5 位,因此字母表正好需要 32 个符号。它比 Base64 更长,但不含标点,通常更适合人工抄写、大小写不敏感的标识符和只接受字母数字的系统。

本页把普通文本先转换为 UTF-8 字节,再进行 Base32 编码。这个步骤决定了重音字符、中文、日文和 emoji 是否能与其他工具正确互通。解码时先恢复字节,再使用严格 UTF-8 解码;如果原始内容其实是密钥、压缩数据或随机字节,而不是文本,就会明确报错。

填充开关只控制末尾等号。RFC 4648 可把输出补到 8 的倍数,但很多协议在长度已知时省略填充。解码器同时接受两种形式,同时检查末尾未参与完整字节的位必须为零,避免多个不同字符串表示同一组字节。

如何使用 Base32 转换器

  1. 输入普通文本时选择编码;已有 Base32 字符串时选择解码。
  2. 编码时确认目标协议是否要求等号填充。明确要求固定 8 字符分组时应保留填充。
  3. 输入或粘贴内容,页面会本地实时转换;字母表、长度、填充或 UTF-8 不合法时不会猜测。
  4. 用官方向量或 Unicode 示例对比其他库、命令行工具和 API。
  5. 复制结果或切换方向做往返验证,但仍需单独确认目标协议的填充规则。

Base32 示例与官方向量

以下示例同时覆盖 RFC 4648 测试向量、Unicode、大小写和填充策略。可使用上方示例按钮按对应方向与选项复现。

输入 输出 转换方向 说明
f MY====== 编码 包含填充符: 包含填充 — RFC 向量:单字节. 单字节只产生两个有效 Base32 字符,因此需要六个填充符。
foobar MZXW6YTBOI====== 编码 包含填充符: 包含填充 — RFC 向量:foobar. 这是 RFC 4648 第 10 节中最长的文本测试向量。
Hello JBSWY3DP 编码 包含填充符: 不含填充 — 无填充文本. 数据字符完全相同,只省略末尾可选的等号。
jbswy3dp Hello 解码 解码小写输入. 规范输出使用大写,但解码器接受小写字母。
你好 4S62BZNFXU====== 编码 包含填充符: 包含填充 — Unicode UTF-8. 中文先编码为六个 UTF-8 字节,不会按 JavaScript 码元截断。
编码 包含填充符: 包含填充 — 空值. 空字节序列对应空字符串,不需要填充。

可接受输入、填充与规范形式

编码接受有效 Unicode 文本并使用 UTF-8。解码只接受 A-Z、2-7、可选小写字母,以及末尾连续的等号。空格和换行不会被自动删除,因为严格模式更容易发现密钥或标识符在复制时被破坏。

无填充数据字符的长度模 8 只能是 0、2、4、5 或 7;其他余数无法组成完整字节。有填充时,等号数量必须与最后一个量子精确对应。

  • 规范编码输出使用大写 A-Z 与数字 2-7。
  • 填充只能出现在末尾,填充后的总长度必须能被 8 整除。
  • 数字 0、1、8、9 不属于 RFC 4648 Base32 字母表。
  • 末尾未使用位非零时会拒绝,而不是静默丢弃。
  • 有效 Base32 也可能代表非 UTF-8 二进制数据。

Base32 如何处理字节

编码器从左到右读取 UTF-8 字节,把位加入小缓冲区。每当至少有 5 位,就取出一个 0-31 的值作为字母表索引。最后不足 5 位的部分向高位对齐并用零补齐;启用填充时再补等号到 8 字符边界。

解码器把每个符号映射回 5 位,并在累计到 8 位时输出一个字节。恢复的字节不是按 ASCII 强行解释,而是交给严格 UTF-8 解码器,因此 你好 这样的文本可以按六个字节正确往返。

位运算前会验证字母表、允许的长度余数和准确填充数;结束后再检查残余位为零。该策略遵循 RFC 4648 的严格倾向,更适合协议测试,而不是自动清理可疑输入。

Base32 适合哪些场景

Base32 适用于需要文本形式、又不希望出现标点或大小写敏感问题的字节数据。它不是加密,也不提供完整性,真实协议通常还会加入校验和、MAC 或其他结构。

用途 说明
TOTP 与验证器密钥 许多一次性密码系统用无填充 Base32 展示共享密钥,便于人工输入。
大小写不敏感的标识符 受限字母表更容易穿过会折叠大小写或错误处理标点的系统。
DNS 相关编码 部分分布式协议会在标签中使用 Base32 变体,但必须核对具体字母表。
协议与库测试 官方向量适合验证字节边界、填充和跨语言实现一致性。
人工可见的二进制值 字母表避开 0 和 1 的混淆,但长字符串仍不具备自动纠错能力。

常见 Base32 错误与边界

最常见问题是混用字母表、复制不完整,或套用了另一个系统的填充规则。字符串看起来像 Base32,也可能具有不可能的字符数量;工具会直接报告,而不是自动补删数据字符。

Base32 表示的是字节,不一定是文本。若内容是哈希、密钥或文件,恢复的字节可能不是 UTF-8。本页面面向文本,因此会报 UTF-8 错误;代码中应保留 Uint8Array。

  • 把 0 或 1 当作 O 或 I 会触发非法字符错误。
  • 单个数据字符无法表示完整字节。
  • 位于中间的填充符始终非法。
  • 修改最后一个符号可能造成未使用位非零。
  • Base32 可被任何人解码,不提供保密性。

Base32 与相关编码的区别

应按传输约束选择编码。Base32 用更长文本换取更小、更易抄写的字母表;Base64 更紧凑,Base58 则去除易混淆字符并采用大整数进制转换。

并非所有名为 Base32 的格式都使用同一字母表。Crockford Base32、base32hex 和 z-base-32 都有不同规则,本页只实现 RFC 4648 标准字母表。

格式 说明
Base64 每字符承载 6 位,结果更短,但 + 和 / 在 URL 中可能需要额外处理。
Base58 Bitcoin 字母表去除 0、O、I、l,并保留前导零,但没有 RFC 4648 填充模型。
十六进制 每字节固定两个字符,最直观,但比 Base32 更长。

Base32 编码解码常见问题

这是标准 RFC 4648 Base32 吗?

是。编码器使用 A-Z 与 2-7,支持标准等号填充或省略填充;解码器允许小写输入,同时验证相同的字节表示。

为什么末尾会有很多等号?

Base32 每字符承载 5 位,而输入按 8 位字节到达。等号只用于补齐最后一个 8 字符分组,本身不携带数据。

可以解码没有填充的验证器密钥吗?

可以,只要数据字符长度合法且未使用位为零。许多 TOTP 密钥会省略填充。

为什么不自动忽略空格?

RFC 4648 建议在上层规范未授权时拒绝字母表外字符。严格处理更容易发现损坏或被重新排版的标识符。

Base32 能保护密码或密钥吗?

不能。它是可逆编码,不是加密、哈希或访问控制。以 Base32 展示的 TOTP 密钥仍然是敏感数据。

为什么合法 Base32 仍可能无法显示文本?

它可能代表任意二进制数据,而不是 UTF-8。本页要求解码字节是有效 UTF-8;字节型程序仍可处理同一数据。

相关编码与字符工具

查看全部工具

Cookie 偏好设置

管理你的 Cookie 偏好。必要 Cookie 无法关闭。

必要 Cookie

必要

用于语言选择、隐私选择和网站基础功能,属于必需项。

Cookie: NEXT_LOCALE

分析 Cookie

可选的分析 Cookie 可帮助我们了解访问情况并改进网站。

Cookie: _ga, _gid, _gat, _clck, _clsk

广告 Cookie

可选的广告 Cookie 可能用于展示相关广告并衡量广告效果。

Cookie: __gads, _gcl_au, IDE