Tool House

Base64 不是加密:三个常见误区

分类:常见问题 作者:admin 更新:2026-10-03T13:54:32

经常见到「用 Base64 加密一下」这种说法。Base64 只是编码,任何人一秒可还原。本文说清编码与加密的区别,以及哪些地方确实该用 Base64。

这是最常被混淆的一对概念。一句话说清楚:Base64 是编码(encoding),不是加密(encryption)。

误区一:Base64 能保护数据

不能。Base64 没有密钥,算法完全公开,任何人拿到字符串都能立即还原:

SGVsbG8gV29ybGQ=   →   Hello World

它唯一的作用是把二进制数据表示成 ASCII 字符,好让数据能安全地通过只支持文本的通道(HTTP 头、URL、邮件正文、JSON 字段)。

把密码 Base64 一下存进数据库,安全性等于明文存储。

误区二:Base64 能减小体积

恰恰相反,它会增大约 33%。原因是每 3 个字节(24 位)被拆成 4 个 6 位组,再映射到 64 个可打印字符;不足 3 字节的尾部还要用 = 补齐。

所以它适合「必须走文本通道」的场景,不适合用来压缩。

误区三:URL 里的 Base64 和普通 Base64 一样

不一样。标准 Base64 的字符集包含 + 和 /,这两个字符在 URL 里有特殊含义(+ 表示空格、/ 是路径分隔符),还可能出现在文件名里。

于是有了 Base64URL:把 + 换成 -、/ 换成 _,并且去掉末尾的 =。JWT 用的就是这一种。

那什么时候真的该用

  • 在 JSON 里传二进制:图片、密钥文件等内容转成 Base64 后可以塞进字符串字段
  • HTTP Basic 认证:Authorization: Basic base64(user:pass)(注意这仍然不是加密,必须配合 HTTPS)
  • Data URI:data:image/png;base64,... 把图片内联进 HTML 或 CSS
  • JWT 的 Header 与 Payload:用 Base64URL 编码,防篡改靠的是第三段签名而非编码
  • 邮件附件:MIME 标准就是这么传输二进制的

真要加密该用什么

  • 对称加密:AES-256-GCM(既保密又防篡改)
  • 非对称加密:RSA-OAEP、ECDH
  • 只做完整性校验:SHA-256 等哈希(不可逆,用于校验而非加密)
  • 存密码:bcrypt、scrypt、Argon2(专门设计的慢哈希,不能也不该还原)

想验证一段 Base64 到底对应什么内容,可以用编码转换工具解码查看;要做哈希或 AES 加解密,用加密哈希工具。

← 返回知识库 回到首页