第 2 课
Hash、加密与编码的区别
理解 Hash 与加密、编码各自解决什么问题。
开发者经常混淆 Hash、加密(encryption) 和 编码(encoding),因为它们都会把数据变成另一种形式,但解决的问题完全不同。
编码:改变表示方式,不是保护
编码用于传输或存储格式转换。例如 Base64 把二进制变成可打印 ASCII,收到编码文本的人通常可以直接解码还原。编码的设计目标就是可逆。
加密:用密钥保护机密性
加密保护数据机密性。持有正确密钥时,密文可以解密回明文;没有密钥时,解密应难以实现。加密回答的问题是:如何让只有授权方能够读取?
Hash:指纹,不是保密
Hash 生成用于对比和完整性校验的摘要,正常使用下是单向的。Hash 回答的问题是:这些字节是否与已知指纹一致? 它不能阻止已经拥有原始输入的人重新计算相同 Hash。
快速对比
| 机制 | 可逆? | 典型目标 |
|---|---|---|
| 编码 | 是 | 传输 / 展示格式 |
| 加密 | 是(需密钥) | 机密性 |
| Hash | 否(实际不可逆) | 完整性 / 对比 |
常见误区
有团队会把敏感值做 Base64 后就认为“已保护”。Base64 不是加密。同样,公布文件的 MD5 可以帮助他人校验完整性,但如果对方已经拿到文件,Hash 并不能阻止其读取内容。