Base64 编码解码完整指南:原理、用法与常见坑
Base64 把二进制数据塞进文本协议的编码方式。本文讲清楚什么时候该用、URL Safe 变体、以及踩过的坑。
Base64 是把任意二进制数据编码成 ASCII 字符串的一种方式,常用于把图片塞进 HTML/CSS、把二进制塞进 JSON、把 token 塞进 URL。本指南覆盖原理、URL Safe 变体、文件场景、JWT 应用,以及最常见的踩坑点。
Base64 原理
Base64 把每 3 字节(24 bits)的数据按 6 位一组切成 4 个字符,从 64 个安全字符(A-Z / a-z / 0-9 / + /)中查表替换。不足 3 字节时用 = 填充。
结果:Base64 编码后体积膨胀约 33%(每 3 字节变 4 字符)。
什么时候要用 Base64
- HTML/CSS Data URL:小图标内嵌进 CSS,省一次 HTTP 请求
- JWT Token:JWT 三段都是 URL Safe Base64
- Email 附件:MIME 协议要求二进制附件用 Base64
- API 传二进制:在 JSON 里传图片、证书、签名
- Basic Auth:HTTP Authorization: Basic 头部用 Base64 编码 user:password
URL Safe Base64
标准 Base64 的 + 和 / 在 URL 中需要转义(变成 %2B %2F),不友好。URL Safe Base64 的差别:
+→-/→_- 末尾
=通常省略
JWT 用的就是 URL Safe Base64。本工具勾选「URL Safe」选项即可输出。
文件 ↔ Base64
- 切换到「文件模式」选择本地文件
- 文件被读为字节数组,再 Base64 编码
- 解码模式:粘贴 Base64,工具自动尝试 UTF-8 解码;如失败则提示是二进制
Data URL 完整格式:data:image/png;base64,iVBOR... 前缀部分要手动加。本站「图片转 Data URL」工具会自动加。
常见坑
- 不是所有 Base64 都能 UTF-8 解码:编码的是图片或加密结果时,解码后是乱码,应直接保存为二进制
=填充不是装饰:去掉填充后部分库会解码失败,标准库都能容忍- 包含空白字符:Base64 字符串中的换行、空格在解码前要先去掉
- 大小写敏感:Base64 区分大小写,
abc和ABC是不同的字节
常见问题
Base64 是加密吗?
不是。Base64 是编码(双向无损可逆),任何人都可解码。需要保密用 AES、RSA 等真正的加密算法。
Base64 比原文件大多少?
约大 33%(每 3 字节变 4 字符)。1 MB 文件 Base64 后约 1.33 MB。
为什么 JWT 用 URL Safe Base64?
JWT token 经常出现在 URL 查询参数或路径中,普通 Base64 的 + 和 / 会与 URL 保留字符冲突。