跳到主要内容
编码转换2026-05-285 分钟阅读

在线 Base32/Base58 编码器:字母表变体、校验与 Base64 对照

什么是 Base32 / Base58 编码

Base32 和 Base58 把二进制变成可读文本,和 Base64 同属「可打印字母表」家族,但针对人手抄写 / 口述与加密货币地址做了不同取舍。想直接试,打开 Base32/Base58 编码器:可选 RFC 4648 / Crockford、裸 Base58 / Base58Check,编码后还能看与 Base64 的体积对照。

三种编码怎么分活

编码字符集要点校验典型场景
Base64A–Z a–z 0–9 +/无HTTP、邮件、JWT(另有 URL-safe)
Base32A–Z 与 2–7(RFC);或 Crockford 变体可选TOTP、DNS、口述 ID
Base58去掉 0/O/I/l裸编码无;Base58Check 有比特币地址、IPFS CID 一类

一句话:机器通道优先 Base64;人要手抄或念出来用 Base32;地址类字符串用 Base58,且真实资金场景几乎都包一层 Base58Check。

Base32 为什么适合人抄

  • 字母表避开 0/O、1/I 等易混对(RFC 4648 用 2–7 填数字位)。
  • 全大写时不区分大小写环境也能传(邮件、部分 DNS 标签)。
  • TOTP / HOTP(Authenticator 密钥)生态默认 RFC 4648 Base32。

Base58 为什么适合地址

  • 去掉 0、O、I、l,降低抄写歧义。
  • 不含 + / =,粘贴进 URL 或双击选中时更少被截断。
  • 裸 Base58 本身没有校验和——比特币地址用的是 Base58Check,不是「Base58 自带校验」。

如何使用本站工具

用 Base32/Base58 编码器:

  1. 粘贴明文(编码)或编码串(解码)。
  2. 选 Base32 或 Base58。
  3. 再选字母表变体:
    • Base32:RFC 4648(TOTP)或 Crockford(口述友好,解码时 O→0、I/L→1)。
    • Base58:裸 Bitcoin Base58 或 Base58Check(版本字节 + 双重 SHA-256 前 4 字节校验)。
  4. 点编码 / 解码;非法字符会标出位置,Base58Check 校验失败会明确报错。
  5. 编码成功后下方会给出同一输入在 Base32 / Base58 / Base64 下的长度与膨胀百分比——完整 Base64 编解码仍用 Base64 工具。

代码中的转换

JavaScript(RFC 4648 Base32 思路)

// Base32 编码(示意;生产环境请用经过测试的库或本站同源实现)
function base32Encode(buffer) {
  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
  let bits = '';
  for (const byte of buffer) {
    bits += byte.toString(2).padStart(8, '0');
  }
  let result = '';
  for (let i = 0; i < bits.length; i += 5) {
    const chunk = bits.substr(i, 5).padEnd(5, '0');
    result += alphabet[parseInt(chunk, 2)];
  }
  return result;
}

Python

import base64

def base32_encode(data: bytes) -> str:
    return base64.b32encode(data).decode('ascii')

# Base58 / Base58Check 需额外库,例如 pip install base58
import base58
def base58_encode(data: bytes) -> str:
    return base58.b58encode(data).decode('ascii')

Crockford 变体:为电话口述设计

Crockford Base32 剔除 I、L、O、U(U 也避免拼出不雅词),解码时把 O/o 当成 0、I/i/L/l 当成 1,并常允许连字符分段。ULID 等「人要核对」的 ID 常用它。需求是「两个人电话里对一段码」时选 Crockford;需求是「Authenticator 密钥」时仍用 RFC 4648。

Base58Check:校验和模式(不是裸 Base58)

裸 Base58 只是字母表。比特币地址常见流程:前置版本字节 → 载荷 → 追加 SHA-256(SHA-256(version‖payload)) 的前四字节 → 再整体 Base58。打错一个字符校验失败,而不是把币送进错误地址。本工具的 Base58Check 模式用版本 0x00 演示该包装;解码时先验校验和,失败会直接报错。任何「用户手输编码串」的系统,该抄的是校验和模式,而不只是字母表。

体积:和 Base64 差多少

同一段 UTF-8 文本:

  • Base64:约 +33%(每 3 字节 → 4 字符)。
  • Base32:约 +60%(每 5 bit 一个字符,再加 RFC padding)。
  • Base58:介于二者之间,随数据变化,且无 = 填充。

工具页编码后的对照表用同一输入即时算三列长度。传大文件、API 正文仍优先 Base64(或二进制);Base32/Base58 换的是可读与纠错,不是密度。

实算:编码 Hello

编码典型输出相对 5 字节 UTF-8
Base64SGVsbG8=8 字符(含填充约 +60%)
Base32(RFC)JBSWY3DPEE======16 字符(含填充)
Base58示意短于 Base32、无 =随数据变化

同一字符串贴进 Base32/Base58 编码器,对照面板的膨胀百分比会即时更新,便于判断「更适合人读的字母表」值不值得多占带宽。纯 Base64 密度公式见 Base64 为什么大约涨 33%。

校验和何时要、何时不要

裸 Base32 / Base58 只换字母表。翻错一个字符仍可能解出某段字节——而且常常静默错误。Base58Check(以及部分场景的 Crockford 校验符)让抄写错误失败关闭。涉及资金、与钱包相邻的恢复信息、需要人重打的 ID,用带校验的形态;机器对机器且 TLS 已保证完整性、只需要字母表时,可以省略。

常见踩坑

  • 把比特币地址当裸 Base58 解码再当 UTF-8 文本——地址是二进制载荷,不是自然语言。
  • TOTP 密钥混用 Crockford 与 RFC 4648——Authenticator 认 RFC;口述码认 Crockford。
  • 看见 0/O/I/l 就硬解 Base58——这些字符不在 Bitcoin 字母表里,工具会提示是否其实是 Base32。
  • 以为「Base58 = 带校验」——只有 Base58Check(或同类包装)才验校验和。

FAQ

Base32 和 Base64 有什么区别?

Base32 常用大写字母与数字 2–7(32 符号),Base64 用大小写、数字与 +/(64 符号)。Base32 更适合人抄,体积膨胀更大。原理与中文处理见 Base64 编码详解。

为什么比特币用 Base58 而不是 Base64?

去掉易混字符,并避免 + / 在复制粘贴中的麻烦。地址本身还会再套 Base58Check 校验和;裸 Base58 并不会自动防抄错。

怎么选编码格式?

  • HTTP / API / 邮件附件 → Base64
  • TOTP 密钥 → Base32(RFC 4648)
  • 口述 / ULID 类 → Base32(Crockford)
  • 演示或核对加密货币风格地址串 → Base58Check
  • 只要「去混淆字母表、不要校验」→ 裸 Base58

相关阅读

排查注记

开篇的分活表按「谁在读」切:机器通道用 Base64、人手抄口述用 Base32、地址类字符串用 Base58——后文的选型清单和踩坑条目都是这张表的展开。全文反复强调「裸 Base58 没有校验和、比特币地址用的是 Base58Check」,因为它是最常见的误解;「校验和何时要、何时不要」给出了边界——涉及资金或需要人重打的 ID 用带校验形态,机器对机器且 TLS 已保证完整性时可以省。体积对照的结论也直白:Base32/Base58 换的是可读与纠错,不是密度。


感谢阅读这篇 ToolVault 工具匣 技术文章。更多免费本地工具见 首页。