Base64 编码和解码:完整指南

什么是 Base64?

Base64 是一种二进制到文本的编码方案,它将二进制数据表示为 ASCII 字符串格式。它广泛用于各种计算机应用程序,特别是在需要对需要存储和传输的二进制数据进行编码,以便通过设计用于处理文本数据的媒体进行传输时。

为什么使用 Base64?

Base64 常用于以下几个原因:

Base64 如何工作

Base64 编码通过将每三个字节的输入数据转换为四个 ASCII 字符来工作。以下是该过程的简化说明:

  1. 取 3 字节的二进制数据(总共 24 位)
  2. 将这 24 位分成四个 6 位块
  3. 将每个 6 位块转换为其对应的 Base64 字符

Base64 字母表由 64 个字符组成:A-Z、a-z、0-9、+ 和 /。当输入数据的长度不能被 3 整除时,使用 = 字符进行填充。

Base64 编码表

值   编码   值   编码   值   编码   值   编码
 0   A      17   R      34   i      51   z
 1   B      18   S      35   j      52   0
 2   C      19   T      36   k      53   1
 3   D      20   U      37   l      54   2
 4   E      21   V      38   m      55   3
 5   F      22   W      39   n      56   4
 6   G      23   X      40   o      57   5
 7   H      24   Y      41   p      58   6
 8   I      25   Z      42   q      59   7
 9   J      26   a      43   r      60   8
10   K      27   b      44   s      61   9
11   L      28   c      45   t      62   +
12   M      29   d      46   u      63   /
13   N      30   e      47   v
14   O      31   f      48   w   (填充) =
15   P      32   g      49   x
16   Q      33   h      50   y

编程语言中的 Base64

Python 中的 Base64


import base64

# 编码
text = "你好,世界!"
encoded = base64.b64encode(text.encode('utf-8')).decode('utf-8')
print(f"编码: {encoded}")

# 解码
decoded = base64.b64decode(encoded).decode('utf-8')
print(f"解码: {decoded}")
            

JavaScript 中的 Base64


// 编码
let text = "你好,世界!";
let encoded = btoa(unescape(encodeURIComponent(text)));
console.log(`编码: ${encoded}`);

// 解码
let decoded = decodeURIComponent(escape(atob(encoded)));
console.log(`解码: ${decoded}`);
            

PHP 中的 Base64


<?php
// 编码
$text = "你好,世界!";
$encoded = base64_encode($text);
echo "编码: " . $encoded . "\n";

// 解码
$decoded = base64_decode($encoded);
echo "解码: " . $decoded . "\n";
?>
            

Base64 的常见用例

在 HTML/CSS 中嵌入图像

Base64 可用于直接在 HTML 或 CSS 中嵌入小图像,减少 HTTP 请求:


<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==" alt="Base64 编码的图像">
            

在 JSON 中发送数据

当需要在 JSON 中包含二进制数据时,通常使用 Base64 编码:


{
  "name": "example.png",
  "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="
}
            

URL 安全的 Base64

为了在 URL 中使用,Base64 的一种变体将 + 和 / 分别替换为 - 和 _:


标准: a+b/c==
URL 安全: a-b_c==
            

在线 Base64 工具

以下是一些流行的在线 Base64 编码和解码工具:

Base64 和安全性

警告:Base64 是一种编码方案,而不是加密方法。它不提供任何安全性或数据保护。切勿使用 Base64 存储或传输敏感信息,除非使用适当的加密。

虽然 Base64 可以使数据对人类不可读,但它很容易被解码。对于敏感数据,请始终使用适当的加密方法。

Base64 的优点和缺点

优点:

缺点:

常见问题

Base64 是加密吗?

不,Base64 不是加密。它是一种将二进制数据表示为 ASCII 字符串格式的编码方案。它不提供任何安全性。

为什么 Base64 编码会增加文件大小?

Base64 编码会增加文件大小,因为它用 4 个字符表示 3 个字节的数据。这导致大小增加约 33%。

能压缩 Base64 编码的数据吗?

是的,Base64 编码的数据可以被压缩,但通常在将数据编码为 Base64 之前进行压缩会更有效率。