全部文章
开发

Base64 编码详解:是什么以及何时使用

2025年2月10日5 分钟阅读

TheDailyUtils 上的 Base64 编码器和解码器
直接在浏览器中编码和解码 Base64。

什么是 Base64?

Base64 是一种二进制转文本的编码方案,仅使用 64 个可打印的 ASCII 字符来表示二进制数据:A–Z、a–z、0–9,以及符号 +/,其中 = 用于填充。其目的是在专为处理文本而设计的系统中安全传输二进制数据——例如电子邮件协议、URL、JSON 载荷和 HTML 属性。

重要的是要理解,Base64 不是加密。它提供零安全性。任何看到 Base64 编码数据的人都可以立即解码它。它的目的是为安全传输进行编码,而非隐藏内容。

Base64 编码的工作原理

该算法将输入的每 3 个字节(24 位)拆分为四个 6 位组。每个 6 位组映射到 Base64 字母表中的一个字符。由于 3 个输入字节变成 4 个输出字符,Base64 编码会使数据大小增加约 33%。

如果输入长度不能被 3 整除,则会在输出末尾附加填充字符(===),使总长度成为 4 的倍数。这使解码器能够正确识别原始数据的长度。

常见使用场景

Web 开发中的 Data URI:你可以通过将图片、字体或其他二进制文件编码为 Base64,直接将其嵌入 HTML 或 CSS。例如,一个小图标可以嵌入为 <img src="data:image/png;base64,iVBORw0K...">,从而省去一次 HTTP 请求。这对小型资源很有用,但由于体积开销,对大型文件并不实用。

电子邮件附件:MIME 标准使用 Base64 将二进制附件(图片、PDF 等)编码为文本,以便通过专为处理 ASCII 文本而构建的 SMTP 服务器传输。每次你在电子邮件中附加文件时,背后都涉及 Base64。

在 JSON 或 XML 中存储二进制数据:这些格式基于文本,无法原生表示任意二进制数据。当 API 需要在 JSON 响应中传输文件、图片或加密材料时,Base64 编码是标准解决方案。

HTTP 基本认证:HTTP Basic Auth 方案将凭据以 Base64 编码在 Authorization 标头中:Authorization: Basic dXNlcjpwYXNz。再次强调——这不是加密。它应该只在 HTTPS 下使用。

加密密钥和证书:PEM 格式广泛用于 TLS 证书和 SSH 密钥,它将二进制 DER 编码数据包装在 Base64 中,放在 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 标头之间。

URL 安全的 Base64

标准 Base64 使用 +/,它们在 URL 中有特殊含义。URL 安全的 Base64 用 - 替换 +,用 _ 替换 /,使编码字符串可以安全地包含在 URL 中,无需百分号编码。你会在 JWT(JSON Web Token)和 OAuth 流程中遇到这种变体。

解码 Base64

解码完全是反向过程。每组 4 个 Base64 字符映射回 3 个字节的二进制数据。大多数编程语言都内置了 Base64 支持:

  • JavaScript:btoa(str) 编码,atob(str) 解码(浏览器);Node.js 中使用 Buffer.from(str, 'base64')
  • Python:import base64; base64.b64encode(data)base64.b64decode(data)
  • 命令行:echo -n "hello" | base64echo "aGVsbG8=" | base64 --decode

何时不应使用 Base64

当你需要真正的安全性时,Base64 不适用——请改用适当的加密方法。它还会增加开销,所以在有直接二进制流可用的大型二进制传输场景中不要使用它。当在支持二进制列类型(BLOB、BYTEA)的数据库中存储数据时,存储原始二进制比存储 Base64 编码的文本更高效。

理解 Base64 有助于你阅读 API 文档、调试网络流量,并自信地处理证书、令牌和媒体——这是任何 Web 开发者的基础技能。

在浏览器中编码或解码 Base64

打开免费的 Base64 编码器和解码器——即时转换文本或二进制数据。完全在浏览器中运行,不会向服务器发送任何数据。

base64encodingdeveloperbinaryweb