Base64 到底是什么
Base64 是一种把任意字节翻译成 64 个可打印字符的表示方法:用 A–Z、a–z、0–9 加上
+ 和 /,末尾用 = 补位。每 3 个字节切成 4 组、每组 6 位,
正好对应一个字符,所以编码之后长度大约多出三分之一。它的用途很直接:邮件正文、URL、
配置文件只保证"能放可打印字符",二进制直接塞进去会被截断、被转义,先"洗"成纯文本就安全了。
为什么中文会乱码:btoa 只认 Latin-1
编码用 btoa()、解码用 atob(),看着一行就能搞定。但 btoa
年代很早,只接受码位在 0–255 之间的字符(Latin-1);中文的码位远大于 255,
直接写 btoa('你好') 会当场抛 InvalidCharacterError。
正确做法分两步:先用 TextEncoder 把字符串按 UTF-8 编成字节,再对这些字节做
Base64;解码方向相反,atob 还原出字节后再用 TextDecoder 解回字符串。
顺序错了就会出现"看着是乱码、其实没坏"的现象——把 UTF-8 字节当 Latin-1 解释,就会得到
ä½ å¥½ 这种东西。
对照一下:你好,世界 做 Base64 得到 5L2g5aW977yM5LiW55WM,正是本工具的结果。
Base64 不是加密
Base64 只是"换了个写法",不是"上了锁"。任何人拿到那串字符,一行代码就能还原成原文,不需要密码,也不需要密钥。
有人把口令写成 Base64 放进配置文件,以为别人看不懂——那只是一层遮挡,和用铅笔把字轻轻盖住差不多; 它也不能防篡改,改一个字符照样能解出别的内容。
- 要保密,用加密算法(AES、RSA 之类),把密钥管好。
- 要防篡改,用签名或 HMAC。
- 要存口令,用 bcrypt、Argon2 这类慢哈希,别用 Base64,也别用不加盐的 MD5。
URL 编码:+ 和 %20 的区别
URL 里不能直接出现空格、中文、& 和 =,要写成 % 加两位十六进制,
这就是百分号编码,空格是 %20。但网页表单早期定了一套自己的规则
(application/x-www-form-urlencoded):提交时把空格换成 +,省两个字符。
同一个空格于是有了两种写法:
- 查询串里
+通常代表空格,%2B才代表真正的加号。 - 但在 URL 的路径部分,
+就是普通字符,不代表空格。 - JavaScript 的
decodeURIComponent()不会把+解成空格,它只管百分号; 带+的串要先换成%20再解。
所以解出来的结果里还留着 +,多半不是工具坏了,是这条老规则在起作用。
什么场景会用到
- 接口调试:不少接口把图片、证书这类二进制字段用 Base64 塞进 JSON 传输。
- 邮件附件:MIME 里的附件内容就是 Base64。
- 小图标内联:
data:image/png;base64,...写进 CSS 或 HTML,少一次请求。 - URL 传参:回调地址、带中文的搜索词、含
&的参数,都要先做 URL 编码。 - 看日志与令牌:看不懂的字符串先试 Base64;JWT 前两段就是 Base64URL
(把
+、/换成-、_),本工具也能直接解。
怎么用
- 把内容粘进上面的输入框,按需要点四个按钮之一,结果出现在下面。
- 中文和 emoji 一律按 UTF-8 处理;编码或解码失败都会给出提示,页面不会报错卡住。
本工具完全在你的浏览器里运行,输入的内容不会发送到任何服务器,也不会被保存,关掉页面就没了。