Menu

Base64 编码/解码

即时编码或解码 Base64 字符串和文件。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

Base64 是什么?

Base64 是一种编码方案,用 64 个可打印字符来表示二进制数据。只要纯文本系统需要传输字节,开发者就会用到它:嵌入 HTML 的小图片、令牌、电子邮件附件、data URL、日志中可复制粘贴的密钥,以及存储二进制数据块的 JSON 字段。

Base64 是编码,不是加密。解码一个 Base64 字符串通常能立刻看到原始内容,所以绝不能把它当作安全屏障。除非在编码之前就已经加密,否则 Base64 里的任何内容实际上都是公开的。

在底层,Base64 取 3 个字节(24 位),把它们改写成固定的 64 字符字母表(A 到 Z、a 到 z、0 到 9、+、/)中的 4 个字符。当输入长度不是 3 的倍数时,编码器会在末尾加一个或两个 = 作为填充。这就是 Base64 字符串常常以 = 结尾的原因。

使用 Base64 时你会学到什么

  • 编码改变的是数据的表示方式,并不能隐藏或保护数据,任何人都能解码。
  • Base64 输出大约是原始字节的 4/3,所以它很方便,但并不节省空间。
  • 像 = 这样的填充字符用来补齐最后一组 4 个字符,在很多 Base64 字符串中都很正常。
  • 它有两个相关的变体:标准 Base64(使用 + 和 /)和 Base64URL(使用 - 和 _,可以安全地用在 URL 和 JWT 中)。

如何一步步进行 Base64 编码和解码

  1. 选择方向

    如果你有纯文本或文件,想得到 Base64 输出,选择“编码”。如果你有 Base64 字符串,想还原原始内容,选择“解码”。

  2. 粘贴内容或拖入文件

    把字符串粘贴到文本框中,或把文件(图片、PDF,什么都行)拖到放置区域。文件会被转换成 data: URL,可以直接嵌入 HTML 或 CSS。

  3. 查看输出

    编码输出是 Base64 字符串。解码输出是原始文本;如果输入是文件,还原出的字节会以下载链接的形式显示。

  4. 复制结果

    点击复制按钮,把结果复制到剪贴板。一切都在你的浏览器中运行,输入内容不会离开你的电脑。

Base64 速查表

开始使用 Base64 后会反复遇到的几个概念,由 RFC 4648 定义。

要素含义示例
字母表标准 Base64 使用的 64 个字符A-Z, a-z, 0-9, +, /
URL 安全字母表用于 JWT 和 URLA-Z, a-z, 0-9, -, _
填充长度不是 3 的倍数时,补齐最后一组= 或 ==
分组大小每个编码块的字节数 → 4 个输出字符3 字节 → 4 个字符
长度增长输出比输入大约多 33%100 B → 136 个字符
Data URL在 HTML/CSS 中内嵌文件data:image/png;base64,...

可以试试的 Base64 示例

解码一个简单的词

编码后

SGVsbG8gV29ybGQ=

解码后

Hello World

末尾的 = 是填充,因为 Hello World 有 11 个字节,不是 3 的倍数。解码时总能正确去掉它。

编码一小段 JSON

原文
{"role":"student","active":true}
Base64

eyJyb2xlIjoic3R1ZGVudCIsImFjdGl2ZSI6dHJ1ZX0=

JWT 令牌的每一段都是这样编码的,所以 JWT 的载荷通常以 eyJ 开头,这正是 {" 的 Base64 形式。

认出一个 data URL

Data URL

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgAAIAAAUAAen8GVAAAAAASUVORK5CYII=

前缀声明了媒体类型(image/png)和编码方式(base64)。逗号后面的所有内容就是文件内容。适合随页面一起加载的小图片。

比较标准字母表和 URL 安全字母表

标准

Pj4/Pyc+Pg==

URL 安全

Pj4_Pyc-Pg

URL 安全的 Base64 把 + 换成 -,把 / 换成 _,这样值可以直接放进 URL,无需再转义。JWT 使用的就是这个变体。

Base64 的常见错误

  • 把 Base64 称为“加密”。任何人都不需要密码或密钥就能解码。
  • 忘了 Unicode 文本在 Base64 编码之前要先转换成 UTF-8 字节,否则非 ASCII 字符在编码再解码后会出错。
  • 手动去掉 = 填充,然后把结果交给要求填充的严格解码器。(URL 安全解码器通常接受缺少填充,标准解码器可能不接受。)
  • 把大图片以 Base64 形式嵌入 CSS 或 HTML,而普通的文件 URL 会更小、更快,也更容易缓存。

Base64 常见问题

Base64 编码是什么?

Base64 是一种用 64 字符字母表把二进制数据表示成可打印文本的编码。只要字节需要经过纯文本系统传输,就会用到它:API、JSON、JWT、电子邮件、data URL。

Base64 是怎么工作的?
Base64 取 3 个输入字节(24 位),把它们拆成四组,每组 6 位。每组 6 位映射到 64 个字符中的一个。如果输入长度不是 3 字节的倍数,就加上一个或两个 = 作为填充。
如何解码 Base64 字符串?
把字符串粘贴到 Base64 解码器中,输出就是原始文本或文件。在代码中,大多数语言都有内置函数:浏览器里的 atob()、Node.js 中的 Buffer.from(str, 'base64')、Python 中的 base64.b64decode()。
Base64 安全吗?

不安全。Base64 是编码,不是加密。它是为表示和传输数据设计的,而不是为了保密。如果需要保密,先加密数据,再对密文进行 Base64 编码。

为什么 Base64 有时以 = 结尾?
= 是填充。Base64 每 3 个输入字节输出 4 个字符。当输入长度不是 3 的倍数时,会加上一个或两个 =,让编码后的长度保持为 4 的倍数。
Base64 能编码图片吗?
能。图片字节可以进行 Base64 编码,放进 data:image/png;base64,... 这样的 URL,图片就能直接嵌入 HTML、CSS 或 JSON,无需额外的网络请求。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始