什么是 Base64 编码?
Base64 是一种将二进制数据(如图片、文件)转换为纯文本字符串的编码方式。它使用 64 个可打印字符(A-Z、a-z、0-9、+、/)来表示任意二进制内容,因此得名 Base64。
Base64 编码后的内容可以安全地在只接受文本的系统中传输,例如电子邮件、JSON API、HTML 属性等。
Base64 的常见用途
- 邮件附件:MIME 协议用 Base64 编码二进制附件,使其能通过纯文本邮件系统传输
- 图片内嵌 HTML/CSS:
src="data:image/png;base64,iVBORw0KGgo..." 格式,减少 HTTP 请求
- API 传输:JSON 不支持二进制,Base64 是传输文件内容的标准方式
- JWT(JSON Web Token):Header 和 Payload 部分使用 Base64Url 编码
- 基本认证:HTTP Basic Auth 将
用户名:密码 Base64 编码后放在请求头中
如何在线进行 Base64 编码 / 解码
使用 tool.tl Base64 编码工具 或 Base64 解码工具:
- 打开 tool.tl/base64-encoder(编码)或 tool.tl/base64-decoder(解码)
- 在输入框中粘贴文本或上传文件
- 结果实时生成
- 点击「复制」即可使用
Base64 编码示例
| 原始文本 | Base64 编码结果 |
| Hello | SGVsbG8= |
| Hello, World! | SGVsbG8sIFdvcmxkIQ== |
| tool.tl | dG9vbC50bA== |
| 123456 | MTIzNDU2 |
注意结尾的 = 或 ==:这是填充符,用于保证编码结果长度是 4 的倍数。
Base64 vs URL 编码:有什么区别?
| 对比项 | Base64 | URL 编码 |
| 编码目标 | 二进制数据 → 文本 | 特殊字符 → %XX 格式 |
| 输出字符集 | A-Za-z0-9+/= | 原字符 + %XX |
| 可读性 | 完全不可读 | 部分可读 |
| 大小变化 | 增大约 33% | 视特殊字符数量而定 |
| 典型用途 | 文件传输、图片嵌入 | URL 查询参数 |
Base64Url 编码(JWT 用的变体)
标准 Base64 中的 + 和 / 在 URL 中有特殊含义,因此 JWT 等场景使用 Base64Url:将 + 替换为 -,将 / 替换为 _,并去掉末尾的 = 填充符。使用 JWT 调试工具 可以解码和验证 JWT。
各语言中的 Base64 操作
# Python
import base64
encoded = base64.b64encode(b'Hello').decode() # 'SGVsbG8='
decoded = base64.b64decode('SGVsbG8=').decode() # 'Hello'
# JavaScript
const encoded = btoa('Hello'); // 'SGVsbG8='
const decoded = atob('SGVsbG8='); // 'Hello'
# Shell
echo -n 'Hello' | base64 # SGVsbG8=
echo 'SGVsbG8=' | base64 --decode # Hello
常见问题(FAQ)
Q:Base64 是加密吗?
A:不是。Base64 只是编码,不提供任何安全性。任何人都可以用解码工具还原原始内容。如果需要加密,应使用 AES、RSA 等真正的加密算法。
Q:Base64 编码后为什么变大了?
A:Base64 用 4 个字符表示 3 个字节,因此编码后内容体积增加约 33%。如果对大文件使用 Base64,需要考虑传输和存储成本。
Q:如何判断一段文字是否是 Base64 编码的?
A:Base64 字符串只包含 A-Z、a-z、0-9、+、/,长度通常是 4 的倍数,末尾可能有 = 或 ==。但这只是特征,最可靠的方式是直接解码后看结果是否有意义。