核心答案:Base64 是把二进制数据编成 64 个可打印字符(A-Z a-z 0-9 + /)的编码——3 字节变 4 字符,体积膨胀约 33%。它是"编码"不是"加密",任何人都能解码,别用它藏敏感信息。

Base64 编码原理

64 个字符表:A-Z(0-25)、a-z(26-51)、0-9(52-61)、+(62)、/(63),外加填充符 =。

编码过程(以 "Hi" 为例):

  1. 转 ASCII:H=72, i=105
  2. 转二进制:01001000 01101001
  3. 按 6 位重分组:010010 000110 100100(补 0)
  4. 查表:18→S, 6→G, 36→k, 补位 → ==
  5. 结果:"Hi" → SGk=
原始长度Base64 长度填充
3n(整除)4n
3n+14n+4==
3n+24n+4=

体积计算

膨胀率 = 4/3 ≈ 133.3%,每 3 字节多 1 字节。

原始大小Base64 后
1 KB1.33 KB
100 KB 图片133 KB
10 MB 附件13.3 MB

常见用途

场景例子
邮件附件MIME 标准(SMTP 只传 7 位文本)
图片内嵌data:image/png;base64,iVBOR...
JWT Tokenheader.payload.signature 三段
HTTP 基础认证Authorization: Basic dXNlcjpwYXNz
源码内嵌小资源favicon、占位图

Base64 与加密

  • Base64 不是加密:无密钥、算法公开、秒级解码
  • dXNlcjpwYXNz 解码就是 user:pass——HTTP Basic 认证必须配合 HTTPS
  • 把密码"Base64 一下再存"等于明文存储,安全领域最经典错误之一

URL 安全变体

标准 Base64 的 + 和 / 在 URL 中有特殊含义,Base64URL 变体:

  • + → −(减号)
  • / → _(下划线)
  • 去掉填充 =(长度可推)
  • JWT、URL 参数传二进制数据都用它

常见误区

  1. 当加密用:Base64 可逆且无密钥,加密请用 AES,哈希请用 SHA-256。
  2. 大文件内嵌:超过几十 KB 的图片内嵌 HTML 会让首屏暴涨,且无法缓存——用外链。
  3. 编码两次:Base64(Base64(x)) 体积膨胀 78%,还常被当作"加固",毫无意义。
  4. 忽略换行:MIME 规范每 76 字符插入换行,部分解码器对含换行的串报错。

用[Base64 编解码工具](/c/dev/base64)在线编码/解码文本与文件。