Base64 在线解码 / 编码

粘贴 Base64 解出原文,或把文本、图片、任意文件转成 Base64。可以直接粘贴 data:image/png;base64,... 这类整段 data URI,会自动识别并剥掉前缀。解出来是图片会直接预览,是二进制会给下载按钮。全部在浏览器本地完成,不上传任何数据。
Base64
说明:
1. 解码栏可以直接粘贴整段 data: URI,前缀会自动剥掉;换行、空格也会自动忽略。
2. 自动兼容 URL 安全字符集(-_)和缺失的 = 补位,不用手工修。
3. 解出来不是文本时,会告诉你是什么格式,图片直接预览,其余给下载按钮。
4. 编码模式下文件大小限制 10 MB —— Base64 会把体积撑大约 1/3,更大的文件不适合内嵌。
5. Base64 是编码不是加密,任何人都能还原,不要用它保护密码或隐私数据。

关于 Base64 编码与解码

Base64 算加密吗?

不算,而且这是最要紧的一条。Base64 是编码:把任意二进制数据用 64 个可打印字符(A-Z a-z 0-9 + /)重新表达一遍,没有密钥、没有秘密,规则是公开的,任何人拿到都能一步还原。它解决的是「这条通道只能传文本,我要塞一张图片进去」的问题,不是「我要让别人看不懂」的问题。所以把密码、身份证号、接口密钥 Base64 一下再存进数据库或写进前端代码,等于没做任何保护——真正要不可逆请看 SHA-256 在线加密,要存密码请用 bcrypt 这类慢哈希。

那个 data:text/html;base64 的链接打不开,怎么把内容取出来?

这类链接长得像 data:text/html;charset=utf-8;base64,PGh0bWw+...,常见于 QQ 邮箱、部分论坛的「分享」功能。打不开不是链接坏了:Chrome 从 2017 年起禁止在地址栏直接打开顶层 data: 链接,Firefox、Edge 随后跟进,因为这个特性被大量用于钓鱼——伪造的登录页可以整个塞进一条链接里,且地址栏显示不出真实域名。

内容本身还在链接里。把整段链接(连 data:text/html;charset=utf-8;base64, 这段前缀一起)粘进上面的解码框,本页会自动识别前缀、剥掉、再解出原文。如果解出来是 HTML,你会看到完整的网页源码。看之前先有个心理准备:如果这条链接是陌生人发来的,它有相当概率是钓鱼页,解出来看看内容可以,别照着里面的表单填账号密码。

图片转 Base64 用在什么地方

主要是内嵌:把小图标直接写进 CSS 的 background-image: url(data:image/png;base64,...) 或 HTML 的 <img src>,省掉一次 HTTP 请求;也用于把图片塞进 JSON、Markdown 或邮件正文这类只能放文本的地方。代价是体积会涨约 1/3(每 3 字节变 4 字符),而且内嵌的图片没法被浏览器单独缓存——改一个字节整个 CSS 文件的缓存就失效了。所以只适合几 KB 的小图标,照片和大图老老实实走 URL。上面勾选「加上 data URI 前缀」就能直接得到可以粘进代码的完整字符串。

为什么有的 Base64 里有 - 和 _,还有的结尾没有 =

那是 URL 安全变体(RFC 4648 §5)。标准字母表里的 +/ 在 URL 和文件名里有特殊含义,放进查询参数会被转义或截断,所以换成 -_;结尾用来补齐长度的 = 在 URL 里同样碍事,常被直接省略。JWT 的三段就是这么编的。本页解码时会自动认出这两种写法并还原,不用你手工替换;编码时勾上「URL 安全字符集」就能输出这种形式。

常见问题

Base64 可以解密吗?

Base64 没有「加密」,自然也谈不上「解密」,准确的说法是解码,而且一定能解开——把上面切到解码模式,粘进去点一下就是原文。它和 MD5、SHA-256 那种单向散列完全不同:后者不可逆,Base64 是完全可逆的双向编码。如果你看到有人用 Base64 来「加密」敏感数据,那是个安全问题,不是加密方案。

解码出来是乱码怎么办?

先看提示。本页解码后会尝试按 UTF-8 读,读不通就说明它本来就不是文本——是图片、PDF 或压缩包,这时会告诉你嗅探到的格式并给出下载按钮,直接下载才是正确操作,硬看当然是乱码。如果确定应该是文本却仍然乱,多半是原文用了 GBK 等非 UTF-8 编码,本页统一按 UTF-8 解,这种情况需要用支持指定字符集的工具。

提示「不是合法的 Base64」是什么原因?

三种常见情况:一是复制时漏掉了结尾几个字符,导致长度不是 4 的倍数且补不齐;二是内容里混进了 Base64 字母表以外的字符,比如从聊天记录里复制时带上了中文引号或省略号;三是这段字符串其实是 URL 编码(%3Chtml%3E 那种)而不是 Base64。换行和空格不会导致这个错误,本页会自动忽略。

为什么编码后的文本变长了?

Base64 用 4 个字符表示 3 个字节,所以固定膨胀到原来的 4/3,约多 33%,再加上末尾的补位字符。这是原理决定的,任何 Base64 工具都一样,不是本页的问题。如果体积敏感,正确的做法是先压缩再编码,或者干脆不内嵌、改用 URL 引用。

能处理多大的文件?

编码模式限制 10 MB。这个上限不是技术极限,而是因为再大就没有意义了:Base64 的用途是内嵌到文本里,一个 10 MB 的文件编完是 13 MB 的字符串,粘到哪里都会出问题。解码模式没有硬性上限,但浏览器处理超长字符串会变慢,几十 MB 的输入可能会卡一下。

Base64 和 URL 编码是一回事吗?

不是。URL 编码(百分号编码)只把 URL 里的特殊字符换成 %XX,其余字符原样保留,结果人还能读个大概;Base64 会把全部内容重新表达成 64 个字符,结果完全不可读,但能安全承载任意二进制。两者经常一起出现:把 Base64 结果放进 URL 参数时,如果用的是标准字母表,里面的 +/ 还需要再做一次 URL 编码——这也正是 URL 安全变体存在的原因。

中文可以直接 Base64 吗?

可以,但要注意字符集。Base64 处理的是字节不是字符,所以必须先把中文按某种编码转成字节。本页统一用 UTF-8,这也是目前的通行做法。同一段中文按 GBK 编码再 Base64,结果和 UTF-8 完全不同,两边对不上时先确认字符集,而不是怀疑 Base64 实现有问题。

我的文件会被传到服务器吗?

不会。转换用的是浏览器内置的 atob / btoa 和 FileReader,文件读进内存、转换完直接显示,没有一个字节离开你的设备。页面加载完之后断开网络,这个工具照常可用——这是最直接的验证方法。详见隐私政策