Base64 转换器

对 Base64 的文本进行编码和解码。

免费在线Base64编码器和解码器

Base64 编码将二进制数据表示为 ASCII 文本 - 常见于 APIs、数据 URI 和电子邮件附件。 Dokall 将纯文本编码为 Base64 并立即将 Base64 解码回可读文本。

在调试 API 有效负载、使用数据 URI 或编码小字符串以进行传输时使用它。处理是本地且即时的。

什么是 Base64 编码?

Base64 是一种二进制到文本的编码方案,用 64 个可打印 ASCII 字符表示二进制数据:A–Z、a–z、0–9、+ 和 /。= 字符用于填充。其设计目的是通过仅处理文本的系统(如电子邮件 MIME 和早期 HTTP)安全传输二进制数据。

Base64 不是加密。它不保护数据——任何人都可以解码。其用途是编码,而非安全。可将其理解为将任意字节表示为安全文本字符的方式。

Base64 编码如何工作

Base64 将每 3 个字节(24 位)的输入拆分为四个 6 位组。每个 6 位组映射到 Base64 字母表中的一个字符。由于 3 字节变成 4 个字符,Base64 输出始终比输入大约大 33%。

当输入长度不是 3 字节的整数倍时,会添加填充。1 字节输入变成带 == 填充的 4 个字符;2 字节变成带 = 填充的 4 个字符;3 字节无需填充。部分实现会省略填充,因为解码器可根据输出长度推断。

何时使用 Base64

在 HTML 或 CSS 中以 data URI 嵌入小图片:<img src="data:image/png;base64,..."> 可避免额外的 HTTP 请求。这对小图标(小于 2–3 KB)效果很好,但对较大图片适得其反,因为 Base64 会使文件增大 33% 且无法独立缓存。

在 JSON 中发送二进制数据:JSON 没有二进制类型,因此文件、图片和加密密钥常被 Base64 编码为字符串,接收端再将字符串解码回字节。

电子邮件附件通过 MIME 使用 Base64,将二进制文件编码为可经过仅处理文本的邮件服务器的 ASCII 文本。

在基于文本的数据库或配置文件中存储小型二进制值。例如,加密密钥和证书数据常以 Base64 字符串存储。

Base64 与 Base64url

标准 Base64 使用 + 和 / 作为第 63、64 个字符,并用 = 填充。这些字符在 URL 和文件名中有特殊含义——+ 在查询字符串中表示空格,/ 是路径分隔符,= 是键值分隔符。

Base64url 将 + 替换为 -、/ 替换为 _,通常省略填充。它生成可在 URL、文件名和 HTTP 头中安全使用而无需额外编码的令牌。JWT 因此使用 Base64url 编码——JWT 的每一部分都经 Base64url 编码,以便令牌可在 URL 查询参数和 Authorization 头中传递而无需转义。

不同编程语言中的 Base64

在 JavaScript 中:btoa() 将字符串编码为 Base64,atob() 解码。对于二进制数据(Uint8Array),在 Node.js 中使用 Buffer 类,或采用 TextEncoder 与 base64 编码工具的更现代方式。

在 Python 中:base64 模块提供 b64encode() 和 b64decode() 用于标准 Base64,以及 urlsafe_b64encode()/urlsafe_b64decode() 用于 Base64url。这些函数处理的是 bytes 对象,而非字符串。

在 Go 中:encoding/base64 包提供 StdEncoding 用于标准 Base64,URLEncoding 用于 Base64url,并有填充与未填充(RawStdEncoding、RawURLEncoding)变体。

在终端中:echo -n "hello" | base64 编码,echo "aGVsbG8=" | base64 -d(或 --decode)解码。echo 的 -n 标志很重要——没有它,末尾换行也会被编码。

常见问题

Base64 是加密吗?
不是。Base64 是编码,不是加密。任何人都可以将 Base64 字符串解码回原始数据,无需密钥或密码。它不提供机密性。若需保护数据,请使用真正的加密(AES、ChaCha20),然后可选地将密文 Base64 编码以便安全的文本传输。
为什么 Base64 输出比输入大约大 33%?
Base64 将每 3 字节(24 位)表示为 4 个字符(每个编码 6 位)。因此比例为 4/3,增大约 33%。例如,3 KB 文件变成约 4 KB 的 Base64。这种开销使 Base64 不适合大文件——最适合小载荷。
可以在 HTML 和 CSS 中用 Base64 表示图片吗?
可以。使用 data URI:在 HTML 中用 <img src="data:image/png;base64,iVBOR...">,在 CSS 中用 url(data:image/png;base64,...)。这可避免额外的 HTTP 请求。但 Base64 图片会使 HTML/CSS 文件增大 33%,无法独立缓存,且解码前会阻塞渲染。仅对小于 2–3 KB 的小图片(图标、小 logo)使用此技巧。
Base64 与 Base64url 有何区别?
标准 Base64 使用 + 和 / 字符,并用 = 填充。Base64url 将 + 替换为 -、/ 替换为 _,通常省略填充。当编码输出需在 URL、文件名或 HTTP 头中安全使用时,请使用 Base64url。JWT 和许多 API 令牌因此使用 Base64url。
如何在 JavaScript 中编解码 Base64?
在浏览器中:btoa('hello') 返回 'aGVsbG8=',atob('aGVsbG8=') 返回 'hello'。注意:btoa/atob 仅处理 ASCII。对于 Unicode 文本,先用 TextEncoder 编码:btoa(String.fromCodePoint(...new TextEncoder().encode('hello')))。在 Node.js 中:Buffer.from('hello').toString('base64') 以及 Buffer.from('aGVsbG8=', 'base64').toString()。
Base64 编码可逆吗?
是的,Base64 是无损、双向的编码。你始终可以将 Base64 转换回精确的原始字节。这与哈希(单向、不可逆)和有损压缩(丢弃部分数据)不同。
Base64 使用哪些字符?
标准 Base64 使用 64 个字符:A–Z(26)、a–z(26)、0–9(10)、+ 和 /(2),外加用于填充的 =。Base64url 将 + 替换为 -、/ 替换为 _ 以提高 URL 安全性。所有字符均为可打印 ASCII,使 Base64 适合基于文本的协议。