Base64 编解码

中文不会乱码,URL-safe 变体直接可用,解码失败会告诉你具体是哪一步不对。 纯前端处理——粘贴的密钥、令牌不会被上传。

输入文本
输出

      

Base64 不是加密

这是最常见的误解。Base64 是一种编码方式,作用是把任意字节映射成 64 个可打印字符,方便在只能传文本的通道里传二进制数据。 它不提供任何保密性——任何人拿到 Base64 字符串都能一行代码还原。

所以:把密码、密钥 Base64 之后存起来,等于没加密。 真正需要保密要用 AES 这类加密算法,Base64 只能负责「让密文能安全地放进文本字段」。

三个容易踩的坑

坑原因怎么办
中文解码回乱码 编码和解码用的字符集不一致。JS 原生 btoa() 只处理 Latin-1,直接喂中文会报错或乱码 先按 UTF-8 转成字节再编码。这个工具已经处理好了
放进 URL 后参数被截断 标准 Base64 含 +、/、=,这些字符在 URL 里有特殊含义(+ 会被解析成空格) 用 URL-safe 变体:+→-、/→_、去掉 =
末尾少几个 = 很多系统(JWT、部分 API)会省略末尾的填充符,严格解码器会报错 这个工具会自动补全 padding,不用手工数

什么时候用到

常见问题

Base64 是加密吗?
不是,完全没有保密作用。Base64 只是把字节映射成 64 个可打印字符, 编解码是公开的、可逆的,任何人都能还原。
把密钥 Base64 之后再存进配置,安全性没有任何提升—— 它只是让内容能安全地放进文本字段(比如 HTTP 头或 JSON)。
为什么编码之后内容变长了?
Base64 用 4 个字符表示 3 个字节,所以体积约为原来的 133%,也就是增加约三分之一(n 字节 → 4×⌈n/3⌉ 字符)。
这就是为什么「用 Base64 内嵌图片」只适合很小的图——大图会明显变大,而且无法被浏览器缓存。
URL-safe 的 Base64 有什么不一样?
标准 Base64 的字母表里有 + 和 /,这两个字符在 URL 里有特殊含义 (+ 在查询字符串里代表空格)。
URL-safe 变体(RFC 4648 §5)把它们换成 - 和 _, 并且通常省略末尾的 =,这样就能直接放进 URL 路径或文件名。
JWT 用的就是这一种。
中文解码回乱码是什么原因?
说明编码和解码用的字符集不一致。
JS 原生的 btoa() 只能处理 Latin-1,直接传中文会抛异常。 正确做法是先把字符串按 UTF-8 转成字节数组再编码,解码时再按 UTF-8 还原。
这个工具已经按 UTF-8 处理,所以中文不会乱码。 如果你在别处遇到乱码,检查那一端是不是用了 GBK。

相关工具

JWT 解析 JWT 的前两段就是 Base64URL 编码的 JSON,这个工具能直接看内容。 URL 编解码 和 Base64 是两回事——URL 编码是为了让字符在 URL 里安全,不改变可读性。 中文转义 / Unicode 中文 ↔ \uXXXX。排查编码问题时和 Base64 配合用。 MD5 / SHA-1 / SHA-256 需要校验完整性而不是编码时用哈希——哈希是不可逆的。