☰
Base64 不是加密:编码、哈希、加密、签名,四个词别再混着用
2026/10/8 19:03:05 网站建设 项目流程

“把它转成乱码就安全了”——如果你也这么想过,那大概率说的是 Base64。它只是换了一套字母表重新编码,谁都能倒回原文,根本不需要钥匙。编码、哈希、加密、签名,是四件完全不同、却被长期混用的工具。用错位,就是漏。

一、四件工具,各管一段

  • 编码(Encoding,如 Base64):换样子,让数据能“过管道”,不提供任何保密;
  • 哈希(Hashing,如 SHA-256、SM3):按手印,单向不可逆,用于校验与存密码;
  • 加密(Encryption,如 AES-256-GCM、SM4-GCM):上锁,有钥匙才能读回;
  • 签名(Signature,如 Ed25519、RSA):盖章,证明“谁发的、有没有被改”,公开可验但不保密。

二、两句话就能分清

只问两句:要不要钥匙?能不能倒回来?

  • 编码:不要钥匙,能倒回来(传输/展示)
  • 哈希:不要钥匙,倒不回来(校验/存密码)
  • 加密:要钥匙,能倒回来(保密)
  • 签名:要钥匙,认人、不保密(证明来源)

三、用错位就是漏

  • 拿编码当保密:Base64 一倒回来就漏;
  • 拿哈希当签名:认不出“是谁”;
  • 拿加密存密码:钥匙一泄等于明文;
  • 拿签名当加密:签名根本不管保密。

四、真实教训:Heartbleed(CVE-2014-0160)

2014 年,OpenSSL 因缺少越界检查,一次可泄露服务器内存最多 64KB,可能包含私钥。依赖这把钥匙保密和签名的数据全部失去意义——而编码和哈希不用钥匙,反而不受影响。加密和签名都系在“钥匙”上。

五、工程实践

  • 编码只用 Base64 搬运与展示,绝不当保密;
  • 哈希用 SHA-256 / HMAC-SHA256 / SM3,用于校验与密码存储(配合 bcrypt / argon2 加盐);
  • 加密只选带完整性校验的 AEAD(AES-256-GCM / SM4-GCM);
  • 签名用 Ed25519,公钥公开可验。

以上实践来自我们构建开源身份层 Autional 的经验,官网:Autional — Identity for AI-Generated Applications 。四件工具各管一段,串一个就漏。

参考:RFC 4648、FIPS 180-4、FIPS 197 / NIST SP 800-38D、RFC 8032;Heartbleed(CVE-2014-0160)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询