[Base64.sh]

zh-Hans v

[指南] 8分钟阅读

[指南] Base64完整参考

关于Base64编码你需要了解的一切:理论、实现和最佳实践。

2025年1月 | fundamentals

// 什么是BASE64?

Base64是一种二进制到文本的编码方案,使用64个ASCII字符来表示二进制数据。它被设计用来编码需要在为文本数据设计的媒介上存储和传输的二进制数据。

Base64字符集包括A-Z、a-z、0-9以及两个额外字符(通常是+和/),加上用于填充的=。

// BASE64如何工作

Base64编码通过获取二进制数据并将其转换为ASCII字符串来工作。这个过程包括:

1. 将输入分割成6位的块(Base64每个字符使用6位) 2. 将每个6位值映射到Base64字母表中的一个字符 3. 如果需要,添加'='字符进行填充

// 示例:将'Man'编码为Base64
// 'M' = 01001101,'a' = 01100001,'n' = 01101110
// 组合:010011010110000101101110
// 分割成6位组:010011 010110 000101 101110
// 十进制值:19, 22, 5, 46
// Base64字符:T, W, F, u
// 结果:'TWFu'

// 常见用例

  • > 在HTML/CSS中嵌入图像(数据URI)
  • > 为JSON API编码二进制数据
  • > 电子邮件附件(MIME编码)
  • > 在数据库中存储二进制数据
  • > 身份验证令牌和API密钥
  • > URL安全的数据传输

// JAVASCRIPT实现

现代浏览器提供内置的Base64编码和解码函数:

要将文本编码为Base64,使用btoa()(binary to ASCII)。要将Base64解码为文本,使用atob()(ASCII to binary)。

// 将文本编码为Base64
const text = '你好,世界!';
const encoded = btoa(text);
console.log(encoded); // SGVsbG8sIFdvcmxkIQ==

// 将Base64解码为文本
const decoded = atob(encoded);
console.log(decoded); // 你好,世界!

// 对于Unicode字符串,使用TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();

const unicodeText = '你好,世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);

// 安全考虑

Base64不是加密或安全措施。它只是用于数据表示的编码。重要的安全提示:

永远不要单独使用Base64来保护敏感数据。始终验证Base64输入以防止注入攻击。请注意Base64会使数据大小增加约33%。

  • > Base64很容易逆转 - 它不提供安全性
  • > 始终验证和清理Base64输入
  • > 对敏感数据使用适当的加密
  • > 考虑为Web应用程序使用URL安全的Base64变体
  • > 在某些情况下要小心填充oracle攻击

// 最佳实践

  • > 为Web应用程序使用URL安全的Base64(将+替换为-,/替换为_)
  • > 始终正确处理填充
  • > 验证输入长度和字符
  • > 对于大数据,考虑在编码前进行压缩
  • > 对于非常大的数据集使用流式处理
  • > 对无效输入实现适当的错误处理