Base64编码与解码
把文本或文件转换为Base64,或将Base64解码回可读文本。Unicode字符处理正确,一键切换URL安全字母表;解码时两种字母表都能识别,有无填充均可。
0 个字符 · 0 个词 · 0 行
0 个字符 · 0 个词 · 0 行
完全在当前浏览器标签页中运行,您的文本不会被上传或保存。
Base64 字符表
RFC 4648 中的索引 → 字符。高亮的最后两个在 URL 安全变体中不同:62 是 + 或 -,63 是 / 或 _。
- 0A
- 1B
- 2C
- 3D
- 4E
- 5F
- 6G
- 7H
- 8I
- 9J
- 10K
- 11L
- 12M
- 13N
- 14O
- 15P
- 16Q
- 17R
- 18S
- 19T
- 20U
- 21V
- 22W
- 23X
- 24Y
- 25Z
- 26a
- 27b
- 28c
- 29d
- 30e
- 31f
- 32g
- 33h
- 34i
- 35j
- 36k
- 37l
- 38m
- 39n
- 40o
- 41p
- 42q
- 43r
- 44s
- 45t
- 46u
- 47v
- 48w
- 49x
- 50y
- 51z
- 520
- 531
- 542
- 553
- 564
- 575
- 586
- 597
- 608
- 619
- 62+ -
- 63/ _
输出长度会变成多少
每 3 个输入字节变成 4 个字符;最后剩下的 1 或 2 个字节,在标准 Base64 中用 = 填充,在 URL 安全形式中不填充。
| 输入 | 字节数 | 标准 | URL 安全 | 长度 |
|---|---|---|---|---|
U | 1 | VQ== | VQ | 4 |
Ul | 2 | VWw= | VWw | 4 |
Ult | 3 | VWx0 | VWx0 | 4 |
UltK | 4 | VWx0Sw== | VWx0Sw | 8 |
UltKi | 5 | VWx0S2k= | VWx0S2k | 8 |
UltKit | 6 | VWx0S2l0 | VWx0S2l0 | 8 |
Base64的作用
Base64 由 RFC 4648 定义,用 64 个可打印 ASCII 字符来表示任意字节:A–Z、a–z、0–9、+ 和 /。每 3 个字节(24 位)会被拆成 4 个 6 位数字,每个数字对应字符表中的一个字符。当输入长度不是 3 的倍数时,最后一组会用一个或两个 = 补位。结果总是比输入大约多 33%:每 3 个字节对应 4 个字符。
它的存在,是因为许多传输渠道原本只为文本设计。电子邮件(MIME)、HTML 和 CSS 中的 data: URL、携带图片或证书的 JSON 字段,以及 HTTP Basic 认证头,都用 Base64 来安全地传输二进制数据。它不是加密,也不会隐藏任何内容,解码不需要密钥。
Unicode与URL安全变体
Base64 编码的是字节而不是文字,所以文本必须先转换成字节。本工具始终使用 UTF-8,这是网络通用的编码:é 会变成两个字节,一个 emoji 则是四个字节。浏览器内置的 btoa 函数遇到 U+00FF 以上的任何字符都会报错,这就是简单的编码器处理带重音字符和 emoji 时会失败的原因;这里文本会先经过 TextEncoder 处理,解码时再用 TextDecoder 还原。如果解码出的字节不是有效的 UTF-8(例如图片、zip 文件),工具会以十六进制显示,而不是显示乱码。
标准 Base64 使用的 + 和 / 在 URL 和文件名中有特殊含义。RFC 4648 第 5 节的 URL 安全字符表把它们替换为 - 和 _,并且通常省略补位符。JSON Web Token 使用的正是这种形式。解码器同时支持两种字符表,也允许缺少补位符,所以你可以任意粘贴其中一种。
编码文件和图片
选择一个文件,工具会用 FileReader 在本地读取,并返回它的 Base64,或者带有该文件 MIME 类型的完整 data: URL,可直接粘贴到 img 标签或 CSS 背景中。内嵌图片能省掉一次 HTTP 请求,但体积会增加三分之一,而且无法单独缓存,因此适合小图标,不适合照片。如果需要图片预览以及现成的 HTML 和 CSS 代码片段,请使用图片转 Base64。
常见问题
- 为什么Base64编码结果比原内容更长?
- 每 3 个字节变成 4 个字符,所以输出大小约为输入的 4/3,再加上最多两个补位字符。非 ASCII 文本会更长,因为 UTF-8 每个字符占用两到四个字节。
- 末尾的=号是什么?
- 是补位。当输入长度不是 3 的倍数时,补位能让输出长度成为 4 的倍数。一个 = 表示最后一组有两个字节,两个 = 表示最后一组只有一个字节。
- 为什么解码时提示无效字符错误?
- 输入中含有字符表以外的内容,例如单词中间的空格、引号,或 URL 编码产生的 %。换行和缺少补位符是可以容忍的,其他字符则不行。
- 用Base64编码密码安全吗?
- Base64 没有任何保护作用。HTTP Basic 认证就是以 Base64 发送 user:password,所以只能在 HTTPS 下使用。要保护机密信息,请使用真正的加密或哈希。
- Base64和Base64url有什么区别?
- 只有两个字符和补位符的差别:Base64url 用 - 和 _ 代替 + 和 /,并且通常省略 =,这样结果无需转义就能放进 URL 和文件名。