Base64 编码解码工具

在浏览器中运行,不上传任何内容

把文本或文件编码为 Base64,或把 Base64 解码为文本、字节或图片。输入无效时会指出出错的字符。

Text

Base64

Base64 appears here as you type.

Ready

什么是 Base64?

Base64 是一种只用 64 个安全字符来表示任意字节的方法:A–Z、a–z、0–9、+ 和 /,末尾用 = 作填充。每 3 个输入字节变成 4 个输出字符,所以编码后的数据比原始数据大约多三分之一。

它之所以存在,是因为很多系统只能可靠地处理文本。借助 Base64,你可以把图片、文件或加密密钥这类二进制数据放进 JSON、邮件、URL 或 HTTP 头里,传输过程中不会损坏。

Base64 有两套字母表。标准字母表(RFC 4648)使用 + 和 /。URL 安全字母表改用 - 和 _,因为 + 和 / 在 URL 中有特殊含义,而且通常省略 = 填充;JWT 用的就是它。邮件(MIME)会把标准 Base64 按每行 76 个字符换行。

在 API 开发中你会经常遇到它。HTTP Basic 认证把 username:password(用户名:密码) 编码成 Base64 放在 Authorization 头里,JWT 的各个部分是 URL 安全的 Base64,很多 API 也会在 JSON 中以 Base64 字符串或 data: URL 的形式返回文件或缩略图。Base64 是编码,不是加密:任何人都能解码。

使用方法

  1. 1选择 Encode 或 Decode。切换模式时会保留你输入的内容;Swap(Alt+Shift+S)会把输出移到输入并切换模式。
  2. 2编码时,输入文本(按 UTF-8 编码),或拖入、打开一个文件,按原样编码其字节。URL-safe、Wrap at 76 和 data: URL 会改变结果的格式。
  3. 3解码时,粘贴 Base64、按行折断的 MIME Base64,或完整的 data: URL。字母表和缺失的填充会自动识别,状态栏会显示它是哪种格式。
  4. 4如果输入不是有效的 Base64,出错的字符会在编辑器中标出,按 F8 可以跳转过去。提示信息会说明问题所在,例如字符不在字母表中,或填充数量不对。
  5. 5解码出的文本按文本显示。不是 UTF-8 文本的字节以十六进制形式显示,图片会显示预览,Download(Ctrl+S)会把字节保存为带正确扩展名的文件。

问题排查

. 不是 Base64 字符
输入很可能是 JWT,它的三个部分用点分隔。请逐个部分解码,或者把令牌粘贴到 JWT 解码工具中。
% 不是 Base64 字符
这段 Base64 为了放进 URL 做过百分号编码(+ 变成了 %2B,= 变成了 %3D)。请先用 URL 解码工具解码。
多了或少了一个字符
Base64 以四个字符为一组,而这个字符串最后一组只有一个字符。几乎可以肯定是复制时被截断了。
解码出的字节不是 UTF-8 文本
数据是二进制的(图片、压缩包、密钥),或者是其他编码(如 Latin-1)的文本。请查看 Hex 视图,或下载这些字节,而不是作为文本复制。
结果中本该是表情符号的地方出现了 �
你编码的文本里包含半个表情符号,通常是因为在表情符号中间截断了字符串。状态栏会指出该字符;这半个字符无法编码,所以变成了 U+FFFD。

常见问题

我的数据会发送到服务器吗?

不会。编码、解码和图片预览都在你的浏览器中完成,打开的文件也只在本地读取。粘贴的文本保存在当前标签页的 session storage 中,直到你清除它或关闭标签页,所以刷新页面不会丢失;Copy link 会把内容放在链接的 # 之后,而浏览器从不把这一部分发送给服务器。你选择的选项(如 URL-safe)会保存在当前浏览器中。

为什么字符数相同,有些编码结果却更长?

Base64 编码的是字节,而不是字符。在 UTF-8 中,一个英文字母占 1 个字节,带重音的字母占 2 个字节,许多中日韩字符占 3 个字节,所以这些文字的文本会产生更长的 Base64。

怎么解码 Basic 认证头?

取出 Authorization 头中 Basic 后面的部分,在这里解码。结果就是用冒号分隔的用户名和密码。

一定需要 `=` 填充吗?

大多数解码器(包括本工具)都接受不带填充的 Base64,URL 安全的 Base64 通常也会省略它。有些严格的解码器要求必须有;标准 Base64 会加上填充,使长度为四的倍数。