免费在线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 标志很重要——没有它,末尾换行也会被编码。