上传文件
  1. base64hub
  2. 其他进制编码
  3. Base32 转 Base64

Base32 转 Base64 在线转换

粘贴一个 Base32 字符串(例如 2FA 应用的设置密钥),得到相同字节的标准 Base64。分组的、小写的、不带填充的输入都可以原样粘贴。

免费 无需注册,不限次数 本地 不上传任何内容 不限大小写 可带空格,可省略填充 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把 Base32 转换为 Base64

  1. 把 Base32 粘贴到 输入 · Base32(RFC 4648) 中。分组之间的空格、小写和缺少的 = 都没问题。
  2. 在 输出 · Base64 中读取 Base64。如果目标不需要 =,请取消勾选输出下方的 填充(=);较长的值可以设置 换行。
  3. 点击 复制输出。方向切换中的 Base64 → Base32(RFC 4648) 可以反向转换,Base64 转 Base32 也一样。

示例

Base32Base64说明
JBSWY3DPEHPK3PXPSGVsbG8h3q2+7w==Google Authenticator 密钥 URI 文档中的示例密钥,10 个字节
jbsw y3dp ehpk 3pxpSGVsbG8h3q2+7w==同一个密钥,应用中常见的分组显示方式
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQMTIzNDU2Nzg5MDEyMzQ1Njc4OTA=RFC 6238 的测试密钥,20 个 ASCII 数字
RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6KiEwO+V01Llzjb4MxBUtgEuCNW8o=20 个看似随机的字节
MZXW6YQZm9vYg==不带填充的输入;带填充的形式是 MZXW6YQ=

第一个密钥解码为字节 48 65 6c 6c 6f 21 de ad be ef:单词 Hello! 后面跟着 de ad be ef。所以它的 Base64 以 SGVsbG8h 开头,也就是 Hello! 的 Base64。

为什么要把 2FA 密钥转换为 Base64

Base32 形式是给人用的:它出现在二维码和设置界面中,也能在手机上手动输入。代码和配置通常需要原始密钥,而 Base64 是在 JSON、YAML、环境变量和数据库中存储原始字节的常用方式。典型场景:

  • 把一份导出的 otpauth:// 链接列表中的 TOTP 账户,迁移到以 Base64 存储密钥的系统中。
  • 把密钥传给接受 Base64 或字节的 HMAC 函数或库,例如在你自己的服务器上校验验证码时。
  • 比较一个密钥的两份副本。同一个 Base32 不管分组、大小写或填充如何不同,都会得到同一个 Base64 字符串,所以输出相同就意味着密钥相同。

Base64 形式的密钥和 Base32 形式的一样敏感,请像存放密码一样存放它。

用 Python 把 Base32 转换为 Base64

Python 的 b32decode 对大小写和填充都很严格,所以要先规范化字符串:

import base64

def b32_to_b64(secret):
    s = secret.replace(" ", "").upper()
    s += "=" * (-len(s) % 8)
    return base64.b64encode(base64.b32decode(s)).decode()

b32_to_b64("jbsw y3dp ehpk 3pxp")    # 'SGVsbG8h3q2+7w=='

如果不调用 .upper(),Python 会抛出 binascii.Error: Non-base32 digit found;如果没有补填充那一行,则会抛出 Incorrect padding。Base64 部分见 Python 中的 Base64。

常见问题

  • 在 9、8、1 或 0 处报错。这些数字不在 RFC 4648 Base32 中。这个值很可能是 base32hex 或 Crockford;例如 91IMOR3F 在这里会在位置 1 处报错。请在 Base32 解码器中选择正确的 从 字母表来解码。
  • 在 - 处报错。有些网站显示的密钥用连字符分隔。请把它们删掉,只有空白会被跳过。
  • Base64 是对的,但服务器拒绝验证码。检查其他参数:两端的算法、位数和周期必须一致,而且服务器时钟必须与手机时钟接近。

常见问题

如何把 Google Authenticator 的密钥转换为 Base64?

从 otpauth:// 链接的 secret= 参数中取出密钥(或二维码下方显示的文本密钥),粘贴到这里即可。JBSWY3DPEHPK3PXP 会变成 SGVsbG8h3q2+7w==。

为什么 Base64 比 Base32 短?

Base64 每个字符存储 6 比特,Base32 只存储 5 比特,所以同样的字节需要的 Base64 字符更少:20 个字节是 32 个 Base32 字符,却只要 28 个 Base64 字符。

能在这里转换 base32hex 或 Crockford Base32 吗?

本页只读取 RFC 4648 Base32。请打开 Base32 解码器,把 从 设为 Base32hex 或 Crockford Base32,把 到 设为 Base64。

如何在命令行中把 Base32 转换为 Base64?

使用 GNU coreutils:printf 'JBSWY3DPEHPK3PXP' | base32 -d | base64。输入必须是大写且不含空格;可以先用 tr -d ' ' | tr a-z A-Z 清理一下。