开发者工具

Base64 编码与解码

把文本或文件转成 Base64,或者把 Base64 解码成文字、可下载的文件。中文、URL 安全格式和 data URL 都能正确处理。

全部在你的浏览器里运行,这里输入的内容不会上传。

怎么用

  1. 选择编码或解码,以及处理的是文本还是文件。
  2. 编码文本时,输入或粘贴文字,右边会实时显示 Base64。要放进网址或 JWT 里的,勾选 URL 安全;对方系统不要末尾的等号时,勾选省略补位。
  3. 编码文件时,把文件拖进框里。勾选输出为 data URL,会得到 data:image/png;base64,… 这样的字符串,可以直接贴进 HTML 或 CSS。
  4. 解码时粘贴 Base64 即可,中间有换行、空格,缺少末尾的等号,或者带着 data: 前缀都没关系。文本会直接显示;如果是图片、PDF、压缩包等其他内容,工具会识别出类型,图片还能预览,然后提供下载。

Base64 的原理

Base64 由 RFC 4648 定义,它把任意字节转换成字母、数字和两个符号,让二进制数据能够通过只为文本设计的通道传输,比如电子邮件、JSON、网址和 HTML。它每次取 3 个字节(24 位),拆成 4 组 6 位,每组的值在 0 到 63 之间,对应字母表 A–Z、a–z、0–9、+、/ 中的一个字符。

输入长度不是 3 的倍数时,最后一组要补位:剩 1 个字节会变成 2 个字符加 ==,剩 2 个字节变成 3 个字符加 =。所以 Base64 的结果总比原始数据大约三分之一:每 3 个字节变成 4 个字符。

中文要先转成 UTF-8

Base64 编码的是字节,不是文字,所以文字要先变成字节。本工具使用 UTF-8,这是网页和几乎所有现代系统使用的编码,一个汉字占 3 个字节。浏览器自带的 btoa 函数只接受 U+00FF 以内的字符,遇到中文或表情符号会直接报错;本工具没有这个限制。

URL 安全的 Base64

+ 和 / 在网址和文件名里有特殊含义。RFC 4648 第 5 节定义的 base64url 变体把它们换成 - 和 _,通常还会省略补位。JSON Web Token 用的就是这种格式。解码时,本工具会自动识别两种字母表。

Base64 不是加密

任何人都能解码 Base64,它没有密钥,什么也藏不住,只是换了一种表示方式。HTTP Basic 认证头里的账号密码、JWT 里的数据,用 Base64 编码只是为了方便传输,并没有被保护起来。

示例

输入Base64
fZg==
foZm8=
foobarZm9vYmFy
Hello, 世界SGVsbG8sIOS4lueVjA==
Hello, 世界(URL 安全、无补位)SGVsbG8sIOS4lueVjA
字节 FB FF BF标准格式 +/+/,URL 安全 -_-_

前三行是 RFC 4648 自带的测试向量。「Hello, 世界」按 UTF-8 是 13 个字节(每个汉字 3 个字节),所以编码后是 20 个字符,含末尾的补位。

解码 SGVsbG8(没有补位)得到「Hello」。解码 SGV*bG8 会失败,提示第 4 个字符,也就是那个星号不合法。

局限

  • 文本按 UTF-8 处理。 如果 Base64 是由 GBK 等其他编码的文字生成的,解码出来的字节不是合法的 UTF-8,工具会把它当作二进制文件提供下载,而不是显示成乱码。
  • 文件大小。 几十 MB 的文件可以编码,但结果会大三分之一,特别长的文本放在输入框里会变慢。大文件建议下载结果,而不是复制。
  • 其他编码。 Base32、Base58(比特币地址)、uuencode 是不同的编码方式,这里不支持解码。

常见问题

Base64 是加密吗?

不是。它是没有密钥、可以直接还原的编码方式,任何人都能解码,不能用来保护秘密。

Base64 末尾的 = 或 == 是什么?

是补位,表示最后一组只有 1 个或 2 个字节,而不是 3 个。有些系统会省略它,本工具两种都能解码。

为什么编码后变大了?

每 3 个字节变成 4 个字符,所以大约大 33%,再加上补位和可能的换行。

能解码 data URL 吗?

能。把整个 data: 开头的字符串粘贴进来,前缀会被自动去掉,图片还能直接预览。

数据会被上传吗?

不会。编码和解码都在你的浏览器里完成。

参考资料

用到这个工具的指南

↵ 打开 · Esc 关闭