
Base64 是一种二进制转文本的编码方案,仅使用 64 个可打印的 ASCII 字符来表示二进制数据:A–Z、a–z、0–9,以及符号 + 和 /,其中 = 用于填充。其目的是在专为处理文本而设计的系统中安全传输二进制数据——例如电子邮件协议、URL、JSON 载荷和 HTML 属性。
重要的是要理解,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----- 标头之间。
标准 Base64 使用 + 和 /,它们在 URL 中有特殊含义。URL 安全的 Base64 用 - 替换 +,用 _ 替换 /,使编码字符串可以安全地包含在 URL 中,无需百分号编码。你会在 JWT(JSON Web Token)和 OAuth 流程中遇到这种变体。
解码完全是反向过程。每组 4 个 Base64 字符映射回 3 个字节的二进制数据。大多数编程语言都内置了 Base64 支持:
btoa(str) 编码,atob(str) 解码(浏览器);Node.js 中使用 Buffer.from(str, 'base64')import base64; base64.b64encode(data) 和 base64.b64decode(data)echo -n "hello" | base64 和 echo "aGVsbG8=" | base64 --decode当你需要真正的安全性时,Base64 不适用——请改用适当的加密方法。它还会增加开销,所以在有直接二进制流可用的大型二进制传输场景中不要使用它。当在支持二进制列类型(BLOB、BYTEA)的数据库中存储数据时,存储原始二进制比存储 Base64 编码的文本更高效。
理解 Base64 有助于你阅读 API 文档、调试网络流量,并自信地处理证书、令牌和媒体——这是任何 Web 开发者的基础技能。
打开免费的 Base64 编码器和解码器——即时转换文本或二进制数据。完全在浏览器中运行,不会向服务器发送任何数据。