🔐
← 返回教程列表

什么是 Base64?初学者完整指南

· 标签: base64, encoding, binary-to-text, web-development, data-transfer

什么是 Base64 编码?

Base64 是一种二进制到文本的编码方案,它使用 64 个字符的字母表将二进制数据表示为 ASCII 字符串格式。它最初是为通过 MIME(多用途互联网邮件扩展)发送电子邮件附件而设计的,至今仍是 Web 上使用最广泛的编码方法之一。

当你需要通过为文本而构建的通道发送二进制数据——如图片、文件或压缩字节——时,Base64 是首选解决方案。它接收任意字节,并将它们转换为安全、可移植的字符串,由字母、数字和几个特殊字符组成。

Base64 如何工作?

Base64 通过以三个字节(24 位)为一组处理二进制数据,并将每组转换为四个 Base64 字符来工作。"Base64" 这个名字源于编码字母表使用 64 个不同的字符:A-Za-z0-9+/

编码算法逐步解析

  1. 取 3 个字节(24 位)的输入数据
  2. 将其拆分为四个 6 位组
  3. 将每个 6 位值(0-63)映射到 Base64 字母表
  4. 添加填充=),如果输入长度不能被 3 整除

下面是一个具体示例。字符串 "Man" 编码如下:

  • M(ASCII 77)= 01001101
  • a(ASCII 97)= 01100001
  • n(ASCII 110)= 01101110

合并:01001101 01100001 01101110 → 拆分为 6 位组:

  • 010011 = 19 → T
  • 010110 = 22 → W
  • 000101 = 5 → F
  • 101110 = 46 → u

因此 "Man" 变为 "TWFu"

填充是怎么回事?

如果输入长度不是 3 字节的倍数,Base64 会添加填充字符(=),使输出为 4 的倍数:

  • 1 字节输入 → 2 个 Base64 字符 + 2 个填充字符(==
  • 2 字节输入 → 3 个 Base64 字符 + 1 个填充字符(=

例如,与 "M" 对应的单个字节编码为 TQ==

Base64 字母表

| 值 | 字符 | 值 | 字符 | 值 | 字符 | 值 | 字符 | |-------|------|-------|------|-------|------|-------|------| | 0 | A | 16 | Q | 32 | g | 48 | w | | 1 | B | 17 | R | 33 | h | 49 | x | | 2 | C | 18 | S | 34 | i | 50 | y | | 3 | D | 19 | T | 35 | j | 51 | z | | 4 | E | 20 | U | 36 | k | 52 | 0 | | 5 | F | 21 | V | 37 | l | 53 | 1 | | 6 | G | 22 | W | 38 | m | 54 | 2 | | 7 | H | 23 | X | 39 | n | 55 | 3 | | 8 | I | 24 | Y | 40 | o | 56 | 4 | | 9 | J | 25 | Z | 41 | p | 57 | 5 | | 10 | K | 26 | a | 42 | q | 58 | 6 | | 11 | L | 27 | b | 43 | r | 59 | 7 | | 12 | M | 28 | c | 44 | s | 60 | 8 | | 13 | N | 29 | d | 45 | t | 61 | 9 | | 14 | O | 30 | e | 46 | u | 62 | + | | 15 | P | 31 | f | 47 | v | 63 | / |

Base64 编码的常见用例

电子邮件附件(MIME)

Base64 是为 MIME(多用途互联网邮件扩展)而创建的。像 SMTP 这样的电子邮件协议是为 7 位 ASCII 文本设计的,因此 PDF、图片和 ZIP 文件等二进制附件在通过电子邮件发送之前必须编码为 Base64。

HTML 和 CSS 中的 data URL

Base64 允许你使用 data URL 将图片、字体和其他媒体直接嵌入 HTML 或 CSS 文件:

<img src="data:image/png;base64,iVBORw0KGgo..." alt="嵌入的图片" />

这消除了额外的 HTTP 请求,对小资源可能是有益的。

JSON Web Token(JWT)

JWT 使用 Base64 的 URL 安全变体(Base64url)来编码每个令牌的 header、payload 和 signature。这就是为什么你在认证系统中会看到像 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 这样的字符串。

在数据库中存储二进制数据

许多数据库针对文本存储进行了优化,可能无法很好地处理原始字节。将二进制数据编码为 Base64 允许你在文本列中存储图片、序列化对象或加密数据。

API 负载

在通过 REST 或 GraphQL API 发送二进制数据时——尤其是 JSON 格式——Base64 是标准选择,因为 JSON 无法原生表示原始字节。

Base64 会增加文件大小吗?

会。Base64 编码会使数据大小增加约 33%。每 3 字节输入会产生 4 字节输出。这种开销是使二进制数据能够通过纯文本通道传输所付出的代价。

Base64 是加密吗?

不是。这是一个常见的误解。Base64 是一种编码方案,不是加密。任何收到 Base64 字符串的人都可以将其解码回原始数据,无需任何密钥。它不提供任何安全性或机密性。如果需要保护数据,请使用加密(如 AES),然后可选地将加密后的字节用 Base64 编码以便传输。

Base64 与其他二进制到文本编码的对比

| 编码 | 字母表大小 | 开销 | 最适合 | |----------|--------------|----------|----------| | Base64 | 64 个字符 | ~33% | 数据传输和嵌入 | | Base32 | 32 个字符 | ~60% | 人类可读、不区分大小写的场景 | | Base16(十六进制) | 16 个字符 | 100% | 调试、内存转储、颜色代码 | | Ascii85 | 85 个字符 | ~25% | Adobe PostScript、PDF 流 |

Base64 在空间效率和广泛兼容性之间提供了均衡的取舍,使其成为 Web 上最流行的二进制到文本编码。

在线尝试 Base64 编码

准备好编码你自己的数据了吗?使用我们的免费在线 Base64 编码器和解码器在浏览器中即时转换文本或文件。无需安装或注册。