Base64 编码与解码

Base64 不是加密,是把二进制数据用 64 个可打印字符表示。它解决的问题是: 邮件协议、URL、JSON 这些通道只认文本,塞不进原始字节。

方法 1:浏览器本地转换

Base64 转换工具:文本双向转换,支持 URL-safe 变体,本地处理。 不要把密码或私钥贴进任何在线编解码网站——Base64 是可逆的,贴过去就等于明文贴过去。

Base64 编码 / 解码 →

方法 2:命令行

# Linux / Mac
echo -n "hello" | base64
echo "aGVsbG8=" | base64 -d

# 图片转 Base64(用于 data URI)
base64 -i logo.png

# Windows PowerShell
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello"))
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("aGVsbG8="))

echo -n 里的 -n 不能省——默认 echo 会追加换行,编码结果会多出 Cg==。

方法 3:代码里

# Python
import base64
base64.b64encode(b'hello')                  # 编码
base64.urlsafe_b64encode(b'hello')          # URL-safe(+/ 换成 -_)
base64.b64decode('aGVsbG8=')                # 解码

# JavaScript(浏览器)
btoa('hello'); atob('aGVsbG8=');
# 中文要先转 UTF-8:
btoa(String.fromCharCode(...new TextEncoder().encode('中文')))

为什么体积会大 33%

Base64 用 4 个字符表示 3 个字节,4/3 ≈ 1.33。所以 Base64 后的图片比原图大三分之一, 而且不能用于大幅优化传输——图片该用二进制传输还是用二进制。 另外 Base64 让 gzip 压缩率变差,把图片塞进 JSON 里常常让接口响应体积翻好几倍。

常见误区