Base64 编码/解码

在线将文本编码为 Base64,或将 Base64 解码为文本,完整支持 UTF-8。支持 URL 安全的 Base64,也能把文件转换为 Base64。

将文件转换为 Base64

如何进行 Base64 编码和解码

  1. 要把文本转成 Base64,选择编码;要把 Base64 还原成文本,选择解码。
  2. 在上方文本框中输入或粘贴内容,结果会立即显示。如果结果要用在 URL、文件名或令牌中,请勾选 URL 安全的 Base64。
  3. 点击复制,或点击⇅ 互换把结果移到输入框并反转方向。这是检查一个值能否原样还原的快捷方法。

文本在编码前会先转成 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 字节数Base64URL 安全
Hello5SGVsbG8=SGVsbG8
你好65L2g5aW95L2g5aW9
你好世界125L2g5aW95LiW55WM5L2g5aW95LiW55WM
café5Y2Fmw6k=Y2Fmw6k
😀48J+YgA==8J-YgA
<<???>>7PDw/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 嵌入,会让页面增大约三分之一,而且图片无法与页面分开缓存。