Base64 编码解码详解:原理、应用场景与在线转换工具

# Base64 编码解码详解:原理、应用场景与在线转换工具

Base64 是开发中最常见的编码方式之一:图片转 Data URI、JWT 令牌、邮件附件、接口鉴权头……到处都有它的身影。这篇文章把 Base64 的原理、用途和在线工具一次讲清。

## Base64 是什么

Base64 是一种基于 64 个可打印字符(A-Z、a-z、0-9、+、/,以及填充符 =)来表示二进制数据的编码方法。

原理很简单:把每 3 个字节(24 bit)分成 4 组,每组 6 bit,6 bit 的取值正好 0-63,对应 64 个字符表。编码后数据会比原数据大约增加 33%。

一个直观例子:

```
hello → aGVsbG8=
```

## 主要应用场景

- **图片转 Data URI**:把图片 Base64 后直接内嵌进 HTML/CSS,减少 HTTP 请求,适合小图标
- **JWT 令牌**:JWT 的三个部分都是 Base64Url 编码的 JSON
- **邮件附件**:SMTP 协议只能传文本,附件统一用 Base64 编码
- **接口传输**:某些场景下把二进制数据编码后放进 JSON/表单传输
- **简单存储**:把二进制配置文件存进数据库文本字段

注意:Base64 只是编码,不是加密,任何人都能解码,千万别用来保护敏感信息。

## 在线 Base64 编码解码工具

我们提供的 [Base64 编码解码工具](https://zjunwei.com/seo-tools/base64.html) 免费使用,浏览器本地处理,支持:

- **编码**:输入任意文本(含中文、emoji),输出 Base64 字符串
- **解码**:输入 Base64 字符串,还原为原始文本
- **UTF-8 安全**:正确处理中文,不会出现 `5L2g5aW9` 解码乱码的情况
- **一键复制**:结果随手复制使用

如果你只是想给图片做 Base64,可以先借助本地工具把图片转成字符串再编码,或者直接用图片压缩工具减小体积后再处理。

## 编程语言实现

```javascript
// JavaScript(浏览器/Node)
btoa("hello"); // aGVsbG8=
atob("aGVsbG8="); // hello
// 中文注意:btoa 只支持 Latin1,中文需先转码
btoa(unescape(encodeURIComponent("中文")));
```

```python
# Python
import base64
base64.b64encode(b"hello") # b'aGVsbG8='
base64.b64decode("aGVsbG8=") # b'hello'
```

## 常见问题

**Q:为什么 Base64 末尾有时有 `=`,有时没有?**
A:当原始字节数不是 3 的倍数时,需要补填充符 `=`(1 或 2 个)凑齐 4 的倍数。有些场景(如 JWT 的 Base64Url)会去掉 `=`。

**Q:Base64Url 和标准 Base64 有什么区别?**
A:Base64Url 把 `+` 换成 `-`、`/` 换成 `_`,并通常去掉 `=`,因为 `+` `/` `=` 在 URL 中有特殊含义。JWT、OAuth 都用 Base64Url。

**Q:Base64 加密安全吗?**
A:不安全。Base64 是公开规则的可逆编码,不是加密算法。真要保护数据请用 AES 等加密算法。

**Q:大文件 Base64 会怎样?**
A:体积膨胀 33% 且纯内存操作,几百 MB 的文件转 Base64 容易撑爆内存,大文件建议走二进制流。

## 总结

Base64 是必备基础知识,遇到编码解码需求,用 [Base64 编码解码工具](https://zjunwei.com/seo-tools/base64.html) 最快最稳,中文不乱码、结果可复制。

💬 暂无评论