如何进行 Base64 编码和解码
- 要把文本转成 Base64,选择编码;要把 Base64 还原成文本,选择解码。
- 在上方文本框中输入或粘贴内容,结果会立即显示。如果结果要用在 URL、文件名或令牌中,请勾选 URL 安全的 Base64。
- 点击复制,或点击⇅ 互换把结果移到输入框并反转方向。这是检查一个值能否原样还原的快捷方法。
文本在编码前会先转成 UTF-8 字节,所以中文、日文、韩文、阿拉伯文、带重音的字母和表情符号都能正常处理。解码器很宽容:会忽略换行和空格,带不带 = 填充都能接受,标准字符集和 URL 安全字符集都能识别,还会去掉开头的 data:…;base64,。如果解码出的字节不是有效的 UTF-8 文本,工具会告诉你字节数以及它看起来是哪种文件(PNG、JPEG、GIF、WebP、PDF 或 ZIP),图片会显示预览,并出现下载解码后的文件按钮。
将文件转换为 Base64
在下方面板中选择文件,Base64 结果会立即出现,同时显示文件名、文件大小和 Base64 的长度。勾选包含 data URL 前缀时,结果会以 data:image/png;base64, 这样的形式开头,可以直接粘贴到 HTML 的 src 属性或 CSS 的 url() 中;取消勾选则只输出 Base64。前缀中的文件类型由浏览器识别,浏览器无法识别时会使用 application/octet-stream。文件由浏览器直接读取,不会上传。
Base64 的原理
Base64 把输入按每 3 个字节(24 位)一组切开,再分成 4 个 6 位的小组。每个 6 位的值(0 到 63)用字符集中的一个字符表示:A–Z(0–25)、a–z(26–51)、0–9(52–61)、+(62)和 /(63)。经典的例子是英文单词 Man:它的三个字节 01001101 01100001 01101110 重新分组为 010011 010110 000101 101110,即 19、22、5、46,对应的字符是 TWFu。
输入长度不是 3 的倍数时,最后一组要加填充:Ma 编码为 TWE=,M 编码为 TQ==。每 3 个字节变成 4 个字符,所以 Base64 比原始数据大约多出三分之一:100 字节变成 136 个字符,1,000 字节变成 1,336 个字符。字符集、填充规则和 URL 安全变体都定义在 RFC 4648 中。电子邮件(MIME)还会把 Base64 按每行最多 76 个字符折行;本工具输出不换行的一整行,但也能正常解码折过行的输入。
示例
| 文本 | UTF-8 字节数 | Base64 | URL 安全 |
|---|---|---|---|
| Hello | 5 | SGVsbG8= | SGVsbG8 |
| 你好 | 6 | 5L2g5aW9 | 5L2g5aW9 |
| 你好世界 | 12 | 5L2g5aW95LiW55WM | 5L2g5aW95LiW55WM |
| café | 5 | Y2Fmw6k= | Y2Fmw6k |
| 😀 | 4 | 8J+YgA== | 8J-YgA |
| <<???>> | 7 | PDw/Pz8+Pg== | PDw_Pz8-Pg |
汉字在 UTF-8 中每个占 3 字节,所以“你好”是 6 字节,正好是 3 的倍数,编码结果 8 个字符,没有填充。
URL 安全的 Base64(base64url)
在 URL 中,+ 可能被解析成空格,/ 用来分隔路径,= 在查询字符串中也有特殊含义。URL 安全变体把 + 换成 -,把 / 换成 _,而且通常省略填充,如表格最后一行所示。JSON Web Token(JWT)的三个部分都使用这种格式。解码时不需要说明是哪种格式,两种都会自动识别。
Base64 的常见用途
- data URL:把小图片或字体直接嵌入 HTML 或 CSS。
- 邮件附件:以 Base64 形式放在邮件正文中传输。
- HTTP 基本认证:把
用户名:密码用 Base64 编码后发送。标准文档中的示例Aladdin:open sesame会变成QWxhZGRpbjpvcGVuIHNlc2FtZQ==,从中也能看出为什么基本认证只有在 HTTPS 下才安全。 - API 和 JSON:用 Base64 在文本字段中携带图片、签名、密钥等二进制数据。
有些开头值得记住:以 iVBORw0KGgo 开头的是 PNG 文件,/9j/ 是 JPEG,JVBERi0 是 PDF,eyJ 通常是 JSON 对象,比如 JWT 的头部。
解码出问题时
- “输入内容包含 Base64 不使用的字符” – 常常是连同值一起复制了引号或标点。如果字符串来自 URL 并且含有
%3D或%2F,请先用 URL 编码/解码解码。 - “输入内容的长度无效” – 字符串缺了一部分,通常是复制时末尾被截断了。
- 显示为二进制数据而不是文本 – 要么它确实是文件,要么是用 UTF-8 以外的旧编码保存的文本。例如用 GBK 编码保存的“你好”,其 Base64 是
xOO6ww==,它不是有效的 UTF-8,所以会显示为 4 字节的二进制数据。Word 和 Excel 文件(.docx、.xlsx)实际上是 ZIP 格式,会被保存为decoded.zip,请把文件改回原来的扩展名。
常见问题
Base64 是加密吗?
不是。它是一种没有密钥、可以还原的编码,任何人都能立刻解码。千万不要用它来隐藏密码或个人信息。
为什么结果末尾有 = 或 ==?
那是填充。输入按 3 个字节一组划分后,如果剩下 2 个字节,就加一个 =;剩下 1 个字节,就加两个。它的作用是告诉解码器最后一组包含几个字节。
能在这里解码 JWT 吗?
可以把用点分隔的三个部分逐个解码,但 JWT 解码器会自动拆分令牌,把头部和载荷显示为格式化的 JSON,并把时间显示成易读的日期。
最大能转换多大的文件?
上限取决于浏览器的内存。不过 data URL 适合小文件:把大图片以 Base64 嵌入,会让页面增大约三分之一,而且图片无法与页面分开缓存。