Hash、加密和编码有什么区别

理解什么时候应该 Hash、什么时候应该加密、什么时候只是编码,避免把三者混用。

Hash、加密和编码都会“改变数据长相”,但它们解决的问题完全不同。混用这些概念,常常会造成密码存储不安全、接口对接失败和调试误判。

一句话版本:Hash 用来做指纹,加密用来保密,编码用来适配传输格式。

Hash 生成数据指纹

Hash 函数把输入变成固定长度的摘要。输入稍微变化,输出通常会完全不同。好的密码学 Hash 还应当难以反推原文。

Hash 适合:

  • 文件完整性校验。
  • 缓存键和内容指纹。
  • 不保存原文的情况下比较数据。
  • 密码存储,但必须使用专门的密码 Hash 算法和 salt,不能直接用 MD5 或 SHA-256。

调试摘要是否一致时,可以使用 Hash 生成器 对比期望值和实际值。

加密保护秘密

加密是可逆的,但需要密钥。只要有正确密钥,就能恢复原文。

加密适合:

  • 存储敏感密钥。
  • 私密消息。
  • 数据库敏感字段。
  • 安全通道里的数据保护。

如果一个值不需要密钥就能还原,那它不是加密。

编码改变表示形式

编码是为了让数据适配某种语法或传输通道。编码通常可以在没有密钥的情况下还原。

编码适合:

  • 用 Base64 表示二进制字节。
  • URL query 参数里的百分号编码。
  • HTML 文本里的实体转义。
  • JSON 字符串转义。

编码不是安全边界。Base64 可能让内容不那么直观,但它并不能保护数据。

怎么选择

先问你要解决什么问题:

  • 判断两个文件是否一致:Hash。
  • 存一个秘密并且之后要恢复:加密。
  • 把文本安全放进 URL:编码。
  • 存用户密码:使用专门的密码 Hash 方案,不要直接加密,也不要裸用 SHA。

快速排查混淆

如果一个值看起来不可读,先看上下文。URL-safe 字符可能是 URL 编码或 Base64URL。固定长度十六进制字符串可能是 Hash。带 IV、key ID 或算法元数据的值可能是加密结果。

把转换类型叫对,后面的工具选择就简单多了。

相关工具

使用本文提到的工具

Hash 生成器hash / md5 / sha256Base64 编码 / 解码base64 / encode / decodeURL 编码 / 解码url / uri / encode

继续学习相关格式

Hash 课程系统学习密码学 Hash:摘要原理、常见算法、完整性校验与典型误区。Base64 课程从零理解 Base64 编码:二进制转文本、填充、URL 场景与常见误区。URL 编码课程理解百分号编码、查询字符串,以及 encodeURI 与 encodeURIComponent 的区别。

返回文章列表