Base64 在线编码解码

将文本、十六进制字节或文件编码为 Base64,或把 Base64 解码为可读文本。支持 Base64URL、MIME 换行以及十多种字符集,所有处理都在浏览器本地完成。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 粘贴要解码的 Base64,或输入要编码的文本。也可以点击“打开文件”:内容为 Base64 的文件会被解码,其他文件会被编码。
  2. 点击“解码”或“编码”。工具默认处于解码模式,结果会随输入实时更新。
  3. 按需调整变体(标准或 URL 安全)、填充、换行和文本编码。
  4. 复制或下载结果,也可以点击交换按钮,把结果送回输入框进行反向转换。

什么是 Base64?

Base64 是一种把二进制数据转换为文本的编码方式,它用 64 个可打印的 ASCII 字符表示任意字节:A-Z、a-z、0-9、+ 和 /,并用 = 作为填充。借助 Base64,图片、密钥、压缩文件等二进制数据可以安全地通过电子邮件、JSON、XML、URL 和 HTML 等只支持文本的渠道传输。

编码时,每次读取 3 个字节(24 位),拆成 4 组 6 位的数值。每个 0 到 63 之间的数值对应字母表中的一个字符。如果输入长度不是 3 的倍数,最后一组会补上一个或两个 =。因此 Base64 输出总是比原始数据大约 33%。

Base64 只是编码,不是加密。任何人都可以解码,所以不要用它来隐藏密码或敏感信息。

Base64 与 Base64URL

标准 Base64 使用的 + 和 / 在 URL 和文件名中有特殊含义。RFC 4648 第 5 节定义的 Base64URL 把它们替换为 - 和 _,并且通常省略填充。JSON Web Token、OAuth 以及需要放进 URL 的场景都使用 Base64URL。本页的解码器会自动识别这两种格式。

标准 Base64Base64URL
第 62、63 个字符+ /- _
填充需要 =可选,通常省略
可直接用于 URL 和文件名否是
典型用途电子邮件(MIME)、data URI、JSON、PEM 密钥JWT、OAuth、URL 参数

Base64 的常见用途

  • 邮件附件。MIME 会把附件编码为 Base64,并按每行 76 个字符换行。使用“换行”选项即可生成这种格式。
  • 嵌入图片和文件。Data URI 可以把小图片、字体或图标直接写进 HTML 和 CSS,详见 图片转 Base64 和 Base64 转图片。
  • API 与配置。JSON 没有二进制类型,因此接口通常用 Base64 字符串传输文件、签名和密钥,Kubernetes Secret 中的值也以 Base64 存储。
  • 身份验证。HTTP Basic 认证把 用户名:密码 编码为 Base64 发送,JSON Web Token 则由三段 Base64URL 组成。
  • 证书与密钥。PEM 文件就是按每行 64 个字符换行的 Base64 编码 DER 数据。

各编程语言中的 Base64

语言编码解码
JavaScript(浏览器)btoa(binaryString)atob(base64)
Node.jsBuffer.from(str).toString('base64')Buffer.from(b64, 'base64').toString()
Pythonbase64.b64encode(data)base64.b64decode(data)
PHPbase64_encode($str)base64_decode($b64)
JavaBase64.getEncoder().encodeToString(bytes)Base64.getDecoder().decode(b64)
C#Convert.ToBase64String(bytes)Convert.FromBase64String(b64)
Gobase64.StdEncoding.EncodeToString(b)base64.StdEncoding.DecodeString(s)
Shellbase64 file.binbase64 -d file.txt

浏览器中的 btoa 只接受 U+00FF 以内的字符。要编码中文等 Unicode 文本,需要先用 TextEncoder 等方式转换为 UTF-8 字节;本工具默认就按 UTF-8 编码文本。

不止 Base64

Base64.is 还支持完整的 Base-N 编码家族:Base32、Base58、Base62、Base85、Ascii85、basE91、Base45、十六进制 和 二进制。如果不确定一段字符串用的是哪种编码,可以试试 编码识别工具,或用 全部编码 一次查看所有结果。

编码规格

字母表A-Z a-z 0-9 + /
输出体积每 3 字节输出 4 个字符(约 133%)
填充用 = 补足到 4 的倍数
标准RFC 4648 第 4 节
区分大小写是

编码示例

输入 (UTF-8)输出
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

常见问题

我的数据会上传到服务器吗?

不会。编码和解码完全由浏览器中的 JavaScript 完成,您输入的文本和文件不会离开您的设备,页面加载后即使断网也能继续使用。

为什么解码后的文字是乱码?
可能是数据本身是二进制(例如图片或压缩文件)而不是文本,也可能是用其他字符集编码的。可以尝试切换“文本编码”(例如 GBK),选择十六进制输出,或使用 Base64 转文件 下载并识别这些字节。
结尾的等号是什么意思?

等号是填充字符。Base64 以 4 个字符为一组,当输入长度不是 3 字节的倍数时,用 = 补齐最后一组。一个 = 表示最后一组编码了 2 个字节,两个 = 表示只编码了 1 个字节。

编码后数据会变大多少?

Base64 把每 3 个字节变成 4 个字符,所以输出比输入大约 33%;如果开启换行,还会多出换行符。

Base64 是加密吗?

不是。Base64 只改变数据的表示形式,没有密钥,任何人都能解码。保护敏感信息请使用 AES、TLS 等真正的加密手段。

全部 Base64 与编码工具