Skip to content

Base64 编码 vs 加密:开发者需要知道的事

Base64 是编码方案,不是加密。本指南厘清两者的关键区别,解释为什么 Base64 无法保护敏感数据,并说明各自适用场景。

作者:陈光明更新于 2026-08-01

什么是 Base64?

Base64 是一种编码方案,将二进制数据转换为一组 64 个 ASCII 字符(A–Z、a–z、0–9、+、/),以便在基于文本的协议中安全传输。Base64 定义于 RFC 4648,它解决的是传输问题,而非安全问题。

输入的每个字节都表示为 Base64 字母表中的字符序列。该编码是确定性的且完全可逆:相同的输入始终产生相同的输出,任何持有输出的人都可以将其解码回原始内容——无需密钥。

什么是加密?

加密是使用密码学算法和密钥将明文转换为密文的过程,只有持有正确密钥的人才能恢复原始数据。与编码不同,加密专为保护数据机密性而设计。

现代加密分为两类:

  • 对称加密(如 AES):加密和解密使用同一密钥。速度快,适合大数据量。
  • 非对称加密(如 RSA):公钥加密,私钥解密。速度较慢,用于密钥交换和数字签名。

编码 vs 加密:核心区别

根本区别:Base64 是编码方案,不是加密。 编码是将数据转换为另一种格式以兼容传输。 加密是将数据转换为密文以保护机密性。 任何人都可以解码 Base64;只有持有密钥的人才能解密加密数据。

一个有用的心智模型:编码就像把英文翻译成法文——任何有字典的人都能读懂两种语言。加密就像把文件放进上了锁的保险箱——只有持有钥匙的人才能打开,与语言无关。

对比表

方面Base64加密
目的将二进制转换为文本以便传输保护数据机密性
可逆性是,任何人可逆(无需密钥)是,仅持有正确密钥者可逆
安全性无(仅为混淆)强(取决于算法 + 密钥)
需要密钥是(对称或非对称密钥)
输出大小比输入大约 33%与输入相近 + IV/nonce + 认证标签
标准RFC 4648AES (FIPS 197)、RSA (RFC 8017)
使用场景邮件 MIME、JWT、Data URL密码、支付数据、私密消息

为什么 Base64 无法保护数据

Base64 不提供任何加密安全性。算法是公开文档化的、确定性的,且不需要密钥。将 Base64 视为"保护"是一种安全反模式,已导致现实世界中的数据泄露。

开发者常犯的错误:

  • 在数据库中存储 Base64 编码的密码(应使用 bcrypt
  • 在 URL 中发送 Base64 编码的 API 密钥(应使用 HTTPS + 正确的认证头)
  • 因为 Base64 编码的数据看起来不可读,就认为它已"加密"

技术细节:RFC 4648

RFC 4648 定义了 Base16、Base32 和 Base64 数据编码。关键技术点:

  • 字母表:64 个字符——A–Z、a–z、0–9、+、/(标准)或 - 和 _(URL 安全变体)
  • 填充:= 字符将输出填充为 4 字节的倍数
  • 大小开销:输出比输入大约 33%(3 字节 → 4 字符)
  • Base64URL 变体:用 - 和 _ 替换 + 和 /,用于 URL 安全编码,JWT 中使用

实际应用示例

1. 邮件 MIME

邮件协议专为 ASCII 文本设计。Base64 编码二进制附件(图片、PDF),使其可通过 SMTP 传输而不会损坏。

2. JWT(JSON Web Token)

JWT 使用 Base64URL 编码将头部和负载表示为 URL 安全的字符串。JWT 的安全性来自其加密签名(HMAC 或 RSA),而非 Base64 编码。任何人都可以解码 JWT 并读取其负载——签名仅保证完整性。

3. Data URL

小图片和字体可以直接嵌入 HTML/CSS 中,作为 data:image/png;base64,... URL,消除额外的 HTTP 请求。

隐私:EZ4Code 如何处理 Base64

EZ4Code 上的所有工具,包括 Base64 编码/解码器,完全在您的浏览器中运行。您的数据永远不会上传到任何服务器——编码和解码在您的设备本地完成。这意味着:

  • 编码或解码数据时不发起任何网络请求
  • 您的输入永远不会离开您的设备,即使是临时性的
  • 页面加载后可离线使用

常见问题

Base64 是加密吗?

不是。Base64 是一种编码方案,不是加密。Base64 将二进制数据转换为 ASCII 字符以便传输,但不提供任何加密安全性。任何人拿到 Base64 字符串都可以立即解码,无需任何密钥。

Base64 可以被解码吗?

可以。Base64 是完全可逆的。任何人都可以使用标准库或在线工具将 Base64 字符串解码回原始内容。不需要密钥,这正是为什么 Base64 绝不能用于保护敏感数据的原因。

应该先加密再 Base64 编码吗?

是的,如果你需要保护数据机密性。首先使用 AES-256 等标准算法加密数据,然后如果需要通过纯文本通道传输,再对密文进行 Base64 编码。加密保护数据安全,Base64 只使其便于传输。

为什么 JWT 使用 Base64?

JWT 使用 Base64URL 编码(Base64 的变体)将头部和负载表示为 URL 安全的字符串。Base64 确保 JSON 可以在 URL 和 HTTP 头中传输而不会出现特殊字符问题。JWT 的安全性来自加密签名,而非 Base64 编码。

相关工具