avatar🌌
思渡鸢思渡鸢的云栈

清梦溢栈-Dream_eve

韶华不再,吾辈须当惜阴;日月其除,志士正宜待旦

一文读懂 Base 系列编码:从 Base16 到 Base92

一文读懂 Base 系列编码:从 Base16 到 Base92

提到编码,你可能首先想到的是 Base64。但你知道吗?Base 家族其实有很多成员,从 Base16 到 Base92,各有各的用途。

今天,我们就来聊聊这些 Base 编码,看看它们都有什么特点,用在什么地方。

什么是 Base 编码

简单来说,Base 编码就是一种用有限的字符集来表示任意数据的方法。

比如 Base64,就是用 64 个字符(A-Z, a-z, 0-9, +, /)来表示所有的二进制数据。

为什么需要编码?主要有两个原因:

  1. 兼容性:有些系统只能处理文本,不能处理二进制数据
  2. 可读性:编码后的数据更易于传输和存储

Base16:最基础的编码

原理

Base16 也叫十六进制编码,使用 16 个字符:0-9A-F

每个字节(8 位)用两个十六进制字符表示。

示例

输入:Hello
输出:48656C6C6F

特点

  • ✅ 简单易懂,人类可读
  • ✅ 广泛用于内存地址、颜色代码等
  • ❌ 编码效率低,只有 50%(1 个字节变成 2 个字符)

应用场景

  • 内存地址表示:0x7FFF
  • 颜色代码:#FF0000(红色)
  • MD5/SHA 哈希值:d41d8cd98f00b204e9800998ecf8427e

Base32:更安全的编码

原理

Base32 使用 32 个字符:A-Z2-7(注意没有 0, 1, 8, 9)。

每 5 个字节编码成 8 个字符。

示例

输入:Hello
输出:JBSWY3DPEBLW64TMMQ======

特点

  • ✅ 不区分大小写
  • ✅ 避免混淆字符(没有 0 和 O,没有 1 和 I)
  • ✅ 适合口头传输
  • ❌ 编码效率 62.5%,比 Base64 低

应用场景

  • TOTP 双因素认证密钥
  • 文件系统(不区分大小写的系统)
  • 需要口头传达的场景

Base64:最常用的编码

原理

Base64 使用 64 个字符:A-Z, a-z, 0-9, +, /,再加上 = 作为填充。

每 3 个字节编码成 4 个字符。

示例

输入:Hello
输出:SGVsbG8=

特点

  • ✅ 编码效率高(75%)
  • ✅ 使用 ASCII 可打印字符
  • ✅ 实现简单,支持广泛
  • ❌ 包含特殊字符(+ 和 /),URL 中需要转义

应用场景

  • 邮件附件(MIME)
  • 在 HTML/CSS 中嵌入小图片(Data URI)
  • JSON Web Token (JWT)
  • 配置文件中的二进制数据

Base58:比特币的选择

原理

Base58 从 Base64 演变而来,去掉了容易混淆的字符:

  • 去掉 0(数字零)
  • 去掉 O(大写字母 O)
  • 去掉 I(大写 i)
  • 去掉 l(小写 L)
  • 去掉 +/

最终剩下 58 个字符。

示例

输入:Hello
输出:7PBU6A

特点

  • ✅ 人类友好,避免混淆
  • ✅ 不会产生乱码
  • ✅ 支持前导零压缩
  • ❌ 编码效率略低于 Base64

应用场景

  • 比特币地址1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
  • 加密货币钱包地址
  • 短链接(如 YouTube 视频 ID)

Base62:URL 友好的编码

原理

Base62 使用 62 个字符:0-9, a-z, A-Z

没有特殊字符,完全由字母和数字组成。

示例

输入:Hello
输出:7PBU6A

特点

  • ✅ URL 安全,无需转义
  • ✅ 文件名友好
  • ✅ 数据库索引友好
  • ❌ 编码效率与 Base64 相当

应用场景

  • 短链接服务bit.ly/2xK9pQ
  • 文件 ID 生成
  • 数据库主键
  • 博客文章 ID(就像我现在用的这样)

Base85:效率之王

原理

Base85 使用 85 个 ASCII 字符(从 !u)。

每 4 个字节编码成 5 个字符,效率比 Base64 更高。

示例

输入:Hello
输出:87cURD]

特点

  • ✅ 编码效率最高(80%)
  • ✅ 输出更短
  • ❌ 包含特殊字符,URL 中需要转义
  • ❌ 实现复杂

应用场景

  • Git 的 pack 文件
  • PDF 文件中的二进制数据
  • Ascii85 编码

Base91:更极致的效率

原理

Base91 使用 91 个 ASCII 可打印字符。

编码效率比 Base85 还要高。

特点

  • ✅ 编码效率极高
  • ✅ 输出最短
  • ❌ 包含特殊字符
  • ❌ 兼容性差

应用场景

  • 需要极致压缩的场景
  • 特殊的数据传输协议

编码效率对比

编码字符集效率输出长度(100 字节输入)
Base161650%200 字符
Base323262.5%160 字符
Base646475%136 字符
Base858580%128 字符
Base919182%122 字符

效率 = 原始数据位数 / 编码后数据位数

如何选择

需要人类可读

  • Base16(十六进制)
  • Base32(不区分大小写)

需要 URL 安全

  • Base62(字母 + 数字)
  • Base58(加密货币)

需要最高效率

  • Base85Base91

通用场景

  • Base64(最常用,兼容性最好)

实际应用案例

1. 短链接服务

原始 URL: https://example.com/very/long/url
短链接:bit.ly/3xK9pQ (Base62)

2. 比特币地址

地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa (Base58)

3. 双因素认证

密钥:JBSWY3DPEBLW64TMMQ====== (Base32)

4. 博客文章 ID

文章:/posts/Mtm7 (Base62)

总结

Base 编码家族各有各的特点:

  • Base16:简单,适合人类阅读
  • Base32:不区分大小写,适合口头传输
  • Base64:通用,兼容性最好
  • Base58:人类友好,加密货币首选
  • Base62:URL 安全,短链接必备
  • Base85/91:效率最高,特殊场景使用

选择合适的编码,可以让你的数据传输更高效、更安全。


参考资料

  • RFC 4648 - The Base16, Base32, and Base64 Data Encodings
  • Bitcoin Wiki - Base58Check encoding
  • 各编码标准的官方文档

写于:2026 年 5 月 12 日
作者:思渡鸢

BlogsClub - 博客所有权认证