Base64 解释:它是什么、何时使用、何时不使用
如果您使用网络超过一周,您就会遇到 Base64:由看似随机的字母、数字组成的长字符串,以及偶尔出现在数据 URI、JSON 负载和令牌中的“+”、“/”或“=”。它看起来很神秘,但概念很简单——理解它可以消除令人惊讶的混乱。
Base64 实际上做了什么
计算机将所有内容存储为二进制。问题在于,许多系统(电子邮件、URL、JSON、XML)都是为文本设计的,原始二进制数据可能包含这些系统解释为控制字符和损坏的字节。 Base64 通过仅使用 64 个安全、可打印的 ASCII 字符(A–Z、a–z、0–9,加上两个符号)重新表达二进制数据来解决这个问题。结果是文本在任何纯文本通道中都完好无损。
该格式在 RFC 4648 中正式定义。您可以使用我们的 Base64 编码器和Base64 解码器立即对任何字符串或文件进行编码和解码。
错误:Base64 不是加密
这是整篇文章最重要的一点。 Base64 是编码,而不是加密。没有密钥,也没有秘密——任何看到 Base64 字符串的人都可以在几秒钟内将其解码回原始字符串。切勿使用它来“隐藏”密码、API 密钥或任何敏感数据。它的存在纯粹是为了兼容性和安全传输,而不是为了保密。如果您需要保密,则需要真正的加密(如 AES)或散列(如 bcrypt)。
编码的工作原理(简要)
Base64 接受三个字节的输入(24 位)并将它们分成四个 6 位组,将每个组映射到其 64 个字符之一。由于三个字节变成四个字符,因此输出比输入大大约 33%。当输入不是三个字节的干净倍数时,“=”填充字符会填充间隙。如果您想要了解位级详细信息,MDN Base64 术语表提供了清晰的视觉演练。
你会在哪里遇见它
- 数据 URI:以
data:image/png;base64,...形式直接嵌入 CSS 或 HTML 中的小图像,保存 HTTP 请求。 - JWT:JSON Web Token 的标头和负载是 Base64URL 编码的 — 解码后,您将立即看到显示的部分。
- HTTP 基本身份验证:凭据采用 Base64 编码(这正是基本身份验证必须始终通过 HTTPS 运行的原因)。
- 电子邮件附件:MIME 使用 Base64 通过基于文本的邮件协议发送二进制文件。
关于大小以及何时避免使用的注释
大约 33% 的大小增加意味着 Base64 非常适合小型资源,但对于大文件来说却是一个糟糕的选择,因为大文件的膨胀超过了内联的便利性。嵌入一个小图标作为数据 URI 很聪明;将 2 MB 英雄图像 Base64 编码到 HTML 中则不然 — 它会延迟渲染并且无法单独缓存。
底线
Base64 是一种传输格式:它使二进制数据可以安全地通过文本通道移动,仅此而已。使用它来嵌入小型资产、读取令牌并将二进制文件打包到 JSON 中 - 永远不要误以为它是安全的。当您需要在野外检查 Base64 字符串时,只需点击一下解码器即可。