什么是 Base64 编码?
Base64 是一种将二进制数据转换为文本的编码方案,使用 64 个可打印的 ASCII 字符来表示二进制数据。它的设计目的是通过仅处理文本的系统安全传输二进制数据——例如电子邮件(MIME)、HTTP 标头和 XML。名称「Base64」来源于编码字母表中使用的 64 个字符。
编码过程如下:将三个字节的输入(24位)拆分为四个6位组,每个6位值映射到Base64字母表中的一个字符。如果输入长度不是三的倍数,则追加填充字符(=)使输出字符数达到四的倍数。最终结果是一个比原始数据大约大33%的字符串,但可以安全地作为纯文本传输。
为什么使用此工具?
此编码器能正确处理 Unicode 文本,支持标准和 URL-safe 两种变体,并完全在浏览器中编码——您的数据永远不会离开您的计算机。
⚡即时编码
结果在您输入时实时显示。无需点击按钮,无需等待服务器响应。
🔗URL-safe 切换
只需点击一下即可在标准(+/)和 URL-safe(-_)编码之间切换。URL-safe 变体的填充字符会自动移除。
🔒完全在客户端运行
所有编码均使用原生 btoa API 和 TextEncoder 在您的浏览器本地进行。不会向任何服务器发送任何内容。
🎛️Unicode 支持
通过在编码前使用 encodeURIComponent,正确处理包括表情符号、CJK 字符和任何 UTF-8 文本在内的完整 Unicode。
如何使用此在线 Base64 编码器
无需账户,无需安装,无需上传——粘贴文本,编码结果立即显示。
- 1
粘贴或输入文本
点击输入框并粘贴任何文本——普通字符串、JSON 载荷、API 密钥、电子邮件地址或任何 UTF-8 内容。编码在您输入时实时更新。
- 2
选择变体
选择标准(RFC 4648)用于 MIME、HTTP Basic Auth 和通用场景。选择 URL-safe 用于 JWT 令牌、查询字符串参数、文件名以及任何 + 或 / 会破坏 URL 解析的场景。
- 3
复制输出
点击复制,一键将 Base64 字符串发送到剪贴板。输出可直接粘贴到代码、配置文件或 API 请求中。
- 4
在应用中使用
将编码后的字符串粘贴到任何需要的地方——Authorization 请求头、data URI、JSON 字段、环境变量或 Kubernetes 密钥。URL-safe 输出的填充字符已自动去除。
Base64 字母表
Base64 使用 64 个字符:大写字母 A–Z(值 0–25)、小写字母 a–z(26–51)、数字 0–9(52–61),以及两个特殊字符(值 62 和 63)。标准 RFC 4648 变体使用 + 和 /;URL-safe 变体将其替换为 - 和 _,以避免在 URL 和文件名中产生冲突。
| A–Z | 0–25 | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| a–z | 26–51 | abcdefghijklmnopqrstuvwxyz |
| 0–9 | 52–61 | 0123456789 |
| +, / | 62–63 | 标准 RFC 4648——在 URL 和文件名中避免使用 |
| -, _ | 62–63 | URL-safe 变体(RFC 4648 §5)——在 URL 和文件名中安全使用 |
标准 Base64 与 URL-safe 对比
标准 Base64 字母表使用 + 和 /,这两个字符在 URL 和文件路径中是特殊字符。URL-safe 变体将其替换为 - 和 _,通常省略填充字符 =。对于 JWT 令牌、查询字符串中的数据、文件名以及任何 + 或 / 可能被误解的情况,请使用 URL-safe 编码。
| 输入 | 标准 | URL-safe |
|---|
| Man | TWFu | TWFu |
| Hello | SGVsbG8= | SGVsbG8 |
| A | QQ== | QQ |
| 1+1=2 | MSsxPTI= | MSsxPTI |
常见用例
电子邮件附件(MIME)
SMTP 是为 7 位 ASCII 文本设计的。MIME 标准使用 Base64 编码将二进制附件(图像、PDF、可执行文件)安全地嵌入到电子邮件消息中。
Data URI
使用 data URI 将图像、字体和其他资源直接嵌入 HTML 或 CSS:data:image/png;base64,...——消除小资源的额外 HTTP 请求。
API 载荷
REST API 在将二进制字段(文件上传、加密密钥、证书)嵌入 JSON 时,通常需要进行 Base64 编码,因为 JSON 没有二进制类型。
配置文件
Kubernetes 密钥、环境变量和 CI/CD 配置通常将二进制密钥和证书存储为 Base64 字符串,以避免转义问题。
HTTP Basic Auth
HTTP Authorization: Basic 标头将凭据编码为 Base64(用户名:密码)。这不是加密——它仅提供用于在标头中传输的编码。
JWT 令牌
JSON Web Token 使用 URL-safe Base64(base64url)对标头和载荷段进行编码,使令牌可以在 URL 和 HTTP 标头中安全使用而无需转义。
何时不应使用 Base64
Base64 是传输编码,而非安全机制。以下是在生产中造成实际问题的最常见误用:
✕不用于安全或加密
Base64 是可以轻易逆转的——解码时无需任何密钥或密码。任何看到 Base64 字符串的人都可以在几秒内解码它。切勿将 Base64 用作加密、哈希或访问控制的替代品。
✕不用于压缩
Base64 会使输出大小增加约 33%,与压缩相反。不要用它来减小载荷大小——应使用 gzip、Brotli 或 zstd。
✕不用于存储二进制文件
在数据库或 JSON API 中以 Base64 存储大型二进制文件会浪费大量存储空间和内存。请使用对象存储(S3、R2、Cloudflare)并直接提供二进制文件。
代码示例
如何在流行的语言和环境中对字符串进行 Base64 编码:
JavaScript (browser)
// Standard Base64
const encoded = btoa(unescape(encodeURIComponent(text)))
// URL-safe Base64 (no padding)
const urlSafe = btoa(unescape(encodeURIComponent(text)))
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
Node.js
// Standard
const encoded = Buffer.from(text).toString('base64')
// URL-safe
const urlSafe = Buffer.from(text).toString('base64url')Python
import base64
# Standard
encoded = base64.b64encode(text.encode()).decode()
# URL-safe (no padding)
url_safe = base64.urlsafe_b64encode(text.encode()).decode().rstrip('=')CLI (bash)
# Standard
echo -n "Hello, World!" | base64
# URL-safe (requires sed)
echo -n "Hello, World!" | base64 | tr '+/' '-_' | tr -d '='
在线 Base64 编码器与其他工具的对比
网上有多种 Base64 编码器。对于开发者日常使用,关键区别在于隐私性、正确性和变体支持。
完全私密——无服务器
此编码器完全在您的浏览器中运行,使用原生 btoa API 和 TextEncoder。您的文本永远不会传输到任何服务器——对 API 密钥、令牌和机密信息安全可靠。
Unicode 编码正确
许多在线 Base64 工具会静默损坏非 ASCII 输入。本工具通过先编码为 UTF-8 字节,正确处理完整 Unicode——表情符号、CJK、阿拉伯语和所有 UTF-8 文本。
两种变体一站搞定
大多数工具只提供标准 Base64。此编码器同时提供标准(+/)和 URL-safe(-_)变体,自动处理填充——无需手动替换字符。
常见问题
Base64 与加密相同吗?
不同。Base64 是一种编码方案,而非加密。任何人都可以轻松逆转它——解码不需要任何密钥或密码。永远不要使用 Base64 来保护敏感数据。请为此目的使用适当的加密(AES、RSA)。
为什么 Base64 输出以 = 或 == 结尾?
Base64 以 3 个字节(24 位)为一组工作,生成 4 个 Base64 字符。如果输入长度不是 3 的倍数,则会附加填充字符(=)以使输出长度成为 4 的倍数。一个 = 表示最后一组有 2 个字节;两个 = 表示只有 1 个字节。
什么是 URL-safe Base64?
URL-safe Base64(在 RFC 4648 §5 中定义)将 + 替换为 -,将 / 替换为 _,以便编码字符串可以在 URL、文件名和 HTTP 标头中使用而无需百分号编码。通常也省略填充字符 =。
Base64 会使文件大小增加多少?
Base64 编码使大小增加约 33%。每 3 个输入字节变为 4 个输出字符。对于 1 MB 的文件,Base64 输出将约为 1.37 MB。
我可以用此工具编码二进制文件吗?
此工具对文本字符串进行编码(随后将其视为 UTF-8 字节)。要编码任意二进制文件(图像、PDF、可执行文件),请使用读取原始字节的语言库或 CLI 工具。
btoa() 和 Buffer.from().toString('base64') 有什么区别?
btoa() 是浏览器内置函数,适用于 Latin-1 字符串;对于非 ASCII 字符,除非先使用 encodeURIComponent 将其编码为 UTF-8 字节,否则会抛出错误。Node.js 中的 Buffer.from(text).toString('base64') 直接处理 UTF-8 字符串,是服务器端的首选方法。
Base64 可以处理二进制文件吗?
此工具将文本字符串编码为 UTF-8 字节,再转为 Base64。对于二进制文件(图片、PDF、可执行文件),请使用能读取原始字节的 CLI 工具或语言库。在浏览器中,使用 FileReader.readAsDataURL(),它会返回包含 Base64 编码二进制内容的 data URI。
编码有大小限制吗?
此工具完全在浏览器中运行,无服务器端限制。实际限制取决于浏览器内存。对于非常大的输入(超过几 MB),CLI 工具(如 Linux/macOS 上的 base64 或 Windows 上的 certutil -encode)效率更高。