← 返回博客

什么是 Base64 编码,原理详解

2026-04-01 · 5 分钟阅读

Base64 编码简介

Base64 是一种将二进制数据转换为纯 ASCII 文本的编码方案。它使用 64 个可打印字符(A–Z、a–z、0–9、+ 和 /)来表示任意二进制数据,因此得名 "Base64"。这种编码方式被广泛应用于互联网协议中,用以在只支持文本的媒介上安全传输二进制内容。

在没有 Base64 之前,通过电子邮件发送图片或文件非常困难,因为早期的邮件系统只能处理 7 位 ASCII 文本。Base64 解决了这一根本性问题,让二进制文件可以像普通文本一样被传输和存储。

Base64 的字符集

标准 Base64 字母表由 65 个字符组成:26 个大写字母(A–Z)、26 个小写字母(a–z)、10 个数字(0–9)、加号(+)、斜杠(/),以及用于填充的等号(=)。每个字符代表 6 个比特的值(2⁶ = 64)。

选择这 64 个字符并非偶然——它们是在各种传输系统和字符编码标准中最安全、最通用的可打印字符。每个字符在 ASCII 表中都有对应的值,这使得 Base64 数据在任何标准文本系统中都能被可靠地传输。

编码原理:分组与映射

Base64 编码的核心原理是将每 3 个字节(24 位)的输入数据,分割为 4 组各 6 位的数据,再将每组 6 位映射为一个 Base64 字符。因此,3 字节的原始数据会变成 4 个字符的 Base64 文本,体积增大约 33%。

例如,字符串 "Man" 的 ASCII 值为 77、97、110,对应二进制为 01001101 01100001 01101110。将这 24 位按 6 位一组拆分,得到 010011、010110、000101、101110,对应十进制为 19、22、5、46,查 Base64 表得字符 T、W、F、u,最终编码结果为 "TWFu"。

Input:  M        a        n
ASCII:  77       97       110
Binary: 01001101 01100001 01101110
6-bit:  010011 | 010110 | 000101 | 101110
Index:  19       22       5        46
Base64: T        W        F        u
Output: TWFu

填充字符的作用

当输入数据的字节数不是 3 的倍数时,Base64 使用等号(=)进行填充,以确保输出长度始终是 4 的倍数。若输入剩余 1 个字节,则需要 2 个等号填充;若剩余 2 个字节,则需要 1 个等号填充。

填充字符的存在让解码器能够准确知道原始数据的字节边界,从而正确还原数据。在某些应用场景(如 URL 安全的 Base64)中,填充字符可以被省略,但解码时需要额外的处理逻辑。

Base64 的主要应用场景

Base64 被广泛应用于多个领域。在电子邮件中,MIME 标准使用 Base64 编码附件(图片、PDF 等二进制文件)。在网页开发中,Data URI 允许将图片、字体直接嵌入 HTML 或 CSS 文件,减少 HTTP 请求。在 API 认证中,HTTP Basic Auth 使用 Base64 编码用户名和密码。

此外,JSON Web Token(JWT)使用 Base64URL(一种变体)编码其头部和载荷。TLS/SSL 证书以 PEM 格式存储,其中证书数据就是 Base64 编码的。密码学密钥、二进制配置数据等也常以 Base64 形式存储在配置文件中。

Base64 不是加密

这是理解 Base64 最重要的一点:Base64 只是编码,不是加密。它没有密钥,任何人都可以解码 Base64 字符串。Base64 的目的是改变数据的表示形式以便传输,而非保护数据的机密性。如果需要保护数据,应使用 AES、RSA 等真正的加密算法。

混淆 Base64 和加密是常见的安全误区。在 HTTP Basic Auth 中,用户名和密码只是 Base64 编码的,如果没有 HTTPS 的保护,攻击者可以轻易解码获取凭据。这就是为什么所有使用 HTTP Basic Auth 的 API 都必须通过 HTTPS 传输。

Base64 的变体

随着应用场景的扩展,Base64 出现了几种重要变体。Base64URL 将 + 替换为 -,将 / 替换为 _,使编码结果可以安全地用在 URL 和文件名中,无需 percent-encoding。这在 JWT、OAuth 令牌等场景中被广泛采用。

另一个常见变体是 Modified Base64 for IMAP,它将 / 替换为逗号(,)以避免与 IMAP 协议的路径分隔符冲突。不同的应用场景可能对 Base64 有不同的要求,选择正确的变体对于系统兼容性至关重要。

总结

Base64 编码是一种将二进制数据转换为文本的标准方法,通过将每 3 字节映射为 4 个 ASCII 字符实现。它不提供任何安全保护,但解决了在文本系统中传输二进制数据的根本问题。理解 Base64 的原理和局限性,对于任何从事网络开发、API 集成或安全研究的工程师都是必备知识。

使用我们的在线工具,你可以立即对任意文本或文件进行 Base64 编码和解码,无需安装任何软件。

立即免费使用相关工具

免费使用 →