使用方法
- 粘贴要解码的 Base64,或输入要编码的文本。也可以点击“打开文件”:内容为 Base64 的文件会被解码,其他文件会被编码。
- 点击“解码”或“编码”。工具默认处于解码模式,结果会随输入实时更新。
- 按需调整变体(标准或 URL 安全)、填充、换行和文本编码。
- 复制或下载结果,也可以点击交换按钮,把结果送回输入框进行反向转换。
什么是 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。本页的解码器会自动识别这两种格式。
| 标准 Base64 | Base64URL | |
|---|---|---|
| 第 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.js | Buffer.from(str).toString('base64') | Buffer.from(b64, 'base64').toString() |
| Python | base64.b64encode(data) | base64.b64decode(data) |
| PHP | base64_encode($str) | base64_decode($b64) |
| Java | Base64.getEncoder().encodeToString(bytes) | Base64.getDecoder().decode(b64) |
| C# | Convert.ToBase64String(bytes) | Convert.FromBase64String(b64) |
| Go | base64.StdEncoding.EncodeToString(b) | base64.StdEncoding.DecodeString(s) |
| Shell | base64 file.bin | base64 -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.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
常见问题
我的数据会上传到服务器吗?
不会。编码和解码完全由浏览器中的 JavaScript 完成,您输入的文本和文件不会离开您的设备,页面加载后即使断网也能继续使用。
为什么解码后的文字是乱码?
结尾的等号是什么意思?
等号是填充字符。Base64 以 4 个字符为一组,当输入长度不是 3 字节的倍数时,用 = 补齐最后一组。一个 = 表示最后一组编码了 2 个字节,两个 = 表示只编码了 1 个字节。
编码后数据会变大多少?
Base64 把每 3 个字节变成 4 个字符,所以输出比输入大约 33%;如果开启换行,还会多出换行符。
Base64 是加密吗?
不是。Base64 只改变数据的表示形式,没有密钥,任何人都能解码。保护敏感信息请使用 AES、TLS 等真正的加密手段。