🔐

Base64 编码 / 解码

免费在线 Base64 编码器和解码器。将文本或文件编码为 Base64 格式,或将 Base64 解码为可读文本。

输入来源

拖放文件或浏览

结果输出

隐私 & 安全

所有处理均在您的本地浏览器中完成。您的数据不会上传到任何服务器。

文件支持

轻松将图片、文档或任何二进制文件转换为 Base64 字符串。

离线可用

加载后即可在无网络连接的情况下使用,随时随地提供便利。

常见问题

什么是 Base64 编码,它有什么用途?

Base64 是一种二进制到文本的编码方案,它使用 64 个字符(A-Z、a-z、0-9、+、/)将二进制数据转换为 ASCII 字符串格式。它主要用于在基于文本的协议(如 HTTP、SMTP)或 JSON 负载中传输二进制数据。常见应用包括通过 MIME 发送电子邮件附件、以 data URL 的形式在 HTML 和 CSS 中嵌入图片、在 JSON Web Token(JWT)中编码负载,以及在基于文本的数据库列中存储二进制数据。

Base64 是加密吗?它安全吗?

不是。Base64 是一种编码方案,不是加密。任何拥有 Base64 编码字符串的人都可以立即将其解码回原始数据,无需任何密钥、密码或机密。它不提供任何机密性、完整性或身份验证。可以把它看作一种以不同格式表示相同数据的方式——就像把英文翻译成摩尔斯电码。如果需要保护敏感数据,请先使用合适的加密算法(如 AES),然后可选地将加密后的字节用 Base64 编码以便传输。

为什么 Base64 有时会以 = 或 == 结尾?

= 字符是填充符。Base64 以 3 字节(24 位)为一组处理输入数据,每组产生 4 个 Base64 字符。当输入长度不是 3 字节的倍数时,编码会添加填充 = 字符,使输出为 4 的倍数。剩余 2 字节时添加一个 =,仅剩余 1 字节时添加两个 =。例如,"Man"(3 字节)编码为 "TWFu",无填充;但 "Ma"(2 字节)编码为 "TWE=",而 "M"(1 字节)编码为 "TQ=="。

Base64 会使数据变大吗?会增加多少开销?

是的,Base64 编码会使数据大小增加约 33%。每 3 字节的二进制输入会产生 4 字节的输出,再加上可选的填充。因此一个 3 MB 的二进制文件在 Base64 编码后大约变成 4 MB。这是为了能够通过纯文本通道传输二进制数据而付出的代价。与其他二进制到文本的编码相比,Base64 相对高效——例如十六进制编码会增加 100% 的开销。

标准 Base64 和 Base64url 有什么区别?

标准 Base64 在其字母表中使用 + 和 /,并使用 = 作为填充。Base64url(URL 安全的 Base64)将 + 替换为 -,将 / 替换为 _,并且通常省略填充。这使得 Base64url 可以在 URL、查询参数和文件名中安全使用,无需额外的百分号编码。Base64url 在 RFC 4648 中定义,并广泛用于 JSON Web Token(JWT)、OAuth 令牌和 Web API。例如,标准的 Base64 字符串 Pj4+Pz8/Pw== 在 Base64url 中变为 Pj4-Pz8_Pw。

什么是 Base64 data URL,它在 HTML 和 CSS 中如何使用?

data URL 是一种将数据直接嵌入 Web 文档的 URI 方案。对于图片,其格式为 data:image/png;base64,iVBORw0KGgo...。它可以替代文件 URL 用在 HTML <img> 标签和 CSS background-image 属性中。data URL 消除了加载图片所需的单独 HTTP 请求,这可以改善小资源(通常小于 10 KB)的性能。然而,它们会使 HTML/CSS 文件大小增加约 33%,并阻止浏览器独立缓存图片。

任何文件都能转换为 Base64 吗?

可以——任何二进制数据,无论是文本、图片、音频、视频、PDF 还是压缩归档文件,都可以编码为 Base64。过程是相同的:读取文件的原始字节并应用 Base64 编码算法。当解码 Base64 字符串时,你会得到完全相同的原始字节。这就是电子邮件附件的工作方式——二进制文件在通过 SMTP 发送前被 Base64 编码,在接收端再解码回原始文件。

在 JavaScript 中编码 Base64 时,如何处理 Unicode 字符(如表情符号或中文文本)?

内置的 btoa() 函数只适用于 Latin-1 字符(单字节字符)。对于包含表情符号、中文字符或其他多字节字符的 Unicode 字符串,你需要首先使用 TextEncoder API 转换为字节: 在 Node.js 中,Buffer 类原生支持 Unicode:Buffer.from('Hello 你好 🚀').toString('base64') 无需任何特殊处理即可正常工作。

相关工具

Base64 编码 / 解码 - CoolTool