
什么是 Base64 编码?
Base64 是一种二进制到文本的编码方案,它使用 64 个可打印的 ASCII 字符来表示二进制数据。名称 "Base64" 源于其基数为 64 的表示法。使用的 64 个字符是:A-Z(26 个)、a-z(26 个)、0-9(10 个)、+ 和 /(2 个),并用 = 作为填充。
Base64 旨在通过设计用于处理文本的通道(如电子邮件 SMTP)安全地传输二进制数据,或将二进制内容嵌入 XML 或 JSON 中。

Base64 编码的工作原理
Base64 每次取 3 个字节(24 位)输入,生成 4 个字符输出。每个输出字符代表输入数据的 6 位。
输入字节: 01001101 01100001 01101110
分组为 6 位: 010011 010110 000101 101110
Base64 索引: 19 22 5 46
Base64 字符: T W F u
编码后大小增加约 33%(每 3 个字节变成 4 个字符)。如果输入不能被 3 整除,则添加 = 填充。
Base64 编码示例
输入: "Hello"
Base64: SGVsbG8=
输入: "Man"
Base64: TWFu
输入: "Ma" (需要填充)
Base64: TWE=
Base64 的常见用途
HTTP 基本认证
HTTP Basic Auth 将凭据编码为 username:password 的 Base64 形式:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
这种编码很容易逆向,如果没有 HTTPS 则不提供任何安全性。

数据 URI
无需单独的 HTTP 请求即可将图像直接嵌入 HTML:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." />
JWT 令牌
JSON Web Token 将其头部和负载编码为 Base64URL(Base64 的 URL 安全变体)。
电子邮件附件(MIME)
MIME 编码使用 Base64 将二进制文件(图像、PDF、可执行文件)附加到电子邮件中。
SSH 公钥
SSH 公钥以 Base64 格式存储和传输。

Base64 与 Base64URL
标准 Base64 使用 + 和 /,这些在 URL 中是特殊字符。Base64URL 将其替换为:
+变为-/变为_- 移除
=填充
当编码后的字符串将出现在 URL、文件名或 HTTP 头中时,请使用 Base64URL。
Base64 不是加密
这是最常见的误解。Base64 无需任何密钥即可轻松逆向:
atob('SGVsbG8=') // "Hello"
任何看到 Base64 编码数据的人都可以立即解码。切勿使用 Base64 来隐藏密码、API 密钥或敏感信息。
大小开销
Base64 编码会使数据大小增加约 33%:
- 100 字节变为约 136 个 Base64 字符
- 1 MB 图像变为约 1.37 MB 的 Base64 字符串
在代码中解码 Base64
// 浏览器
const decoded = atob('SGVsbG8='); // "Hello"
const encoded = btoa('Hello'); // "SGVsbG8="
// Node.js
Buffer.from('SGVsbG8=', 'base64').toString('utf8') // "Hello"
Buffer.from('Hello').toString('base64') // "SGVsbG8="
import base64
base64.b64decode('SGVsbG8=').decode() # "Hello"
base64.b64encode(b'Hello').decode() # "SGVsbG8="
何时使用 Base64
在将二进制数据嵌入文本格式(HTML、CSS、JSON、XML)时,通过文本协议传输二进制数据时,或编码必须经受文本转换的二进制数据时,使用 Base64。
当需要安全性(它不提供任何安全性)、大小效率重要(它增加 33% 开销)或数据已经是文本时,不要使用 Base64。
-> 尝试 Base64 字符串转换器