什么是 Base64 编码?完整指南

CodeKit
base64编码教程

什么是 Base64 编码?

Base64 是一种二进制到文本的编码方案,它将二进制数据转换为 ASCII 字符串格式。它的工作原理是将每三个字节的二进制数据翻译为四个 ASCII 字符,这些字符来自一个特定的 64 字符字母表。这使得二进制数据可以安全地通过电子邮件、HTML 或 JSON 等文本通道传输。

“Base64”这个名字源于它使用 64 个字符作为基础:大写字母 A–Z、小写字母 a–z、数字 0–9,以及符号 +/。当输入长度不是 3 的倍数时,使用 = 字符进行填充。

Base64 编码的工作原理

让我们通过一个简单的例子来说明。编码字符串 "Cat"

  1. 将每个字符转换为 ASCII 值:C = 67,a = 97,t = 116
  2. 转换为二进制:01000011 01100001 01110100
  3. 分割为 6 位一组:010000 110110 000101 110100
  4. 将每个 6 位组映射到 Base64 字母表:Q2F0

所以 "Cat" 编码为 "Q2F0"

// JavaScript 中的编码
const encoded = btoa('Cat');
console.log(encoded); // "Q2F0"

// 解码
const decoded = atob('Q2F0');
console.log(decoded); // "Cat"

你可以使用 CodeKit 上的 Base64 编解码工具 来亲自尝试。

常见使用场景

Base64 编码在日常开发中有许多应用:

  • Data URL:使用 data:image/png;base64,... 将小图片或字体直接嵌入 CSS 或 HTML
  • 邮件附件:MIME 编码使用 Base64 将二进制文件附加到电子邮件
  • API 载荷:在 JSON 请求中传输二进制数据(如图片或文件)
  • 身份认证:HTTP Basic Auth 将 用户名:密码 以 Base64 编码的形式发送
  • JWT 令牌:JSON Web Token 使用 Base64URL 编码头部和载荷部分

Base64 不是加密

最常见的误解之一是把 Base64 当作加密方式。Base64 是编码,不是加密。 它完全不能保护数据——任何人都可以用一行代码解码 Base64 字符串。

// 用 Base64 "加密" 是不安全的!
const "secret" = btoa('my-password');
console.log("secret"); // "bXktcGFzc3dvcmQ="
// 任何人都可以解码:
console.log(atob("bXktcGFzc3dvcmQ=")); // "my-password"

如果你需要保护数据,请使用真正的加密算法(如 AES),或者对密码使用哈希。对于哈希计算,可以试试 哈希生成器 工具。

Base64URL:Web 安全变体

标准 Base64 使用 +/ 字符,这在 URL 和文件名中会造成问题。Base64URL 是专为 Web 使用设计的变体:

  • + 替换为 -(连字符)
  • / 替换为 _(下划线)
  • 移除 = 填充(或替换)
// 将标准 Base64 转换为 Base64URL
function toBase64URL(base64) {
  return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

// JavaScript 内置的 Base64URL 支持(现代浏览器)
const encoded = btoa('Hello, World!')
  .replace(/\+/g, '-')
  .replace(/\//g, '_')
  .replace(/=+$/, '');

console.log(encoded); // "SGVsbG8sIFdvcmxkIQ"

Base64URL 是 JWT 令牌、OAuth2 和许多其他 Web 协议中使用的标准编码方式。

性能考量

Base64 编码会使数据大小增加约 33%。3 字节的输入变成 4 字节的输出。对于小型载荷这种开销可以接受,但对于大文件可能会很显著。需要权衡以下几点:

  • 小图标和图片:使用 Data URL 和 Base64 可以减少 HTTP 请求
  • 大文件:Base64 编码会膨胀文件大小,建议直接上传文件
  • 网络传输:33% 的开销在大量请求中会累积

快速参考表

输入大小Base64 输出大小开销
1 字节4 字节300%
3 字节4 字节33%
100 字节136 字节36%
1 KB1.37 KB37%

总结

Base64 是每个开发者都应该了解的基础编码方案。它对于通过文本系统传输二进制数据至关重要,但请记住——它永远不能替代加密。编码用 Base64,安全用加密。

准备好编码或解码数据了吗?试试 CodeKit 上的 Base64 工具——所有处理都在浏览器中完成,数据不会发送到任何服务器。