第 2 课

Hash、加密与编码的区别

理解 Hash 与加密、编码各自解决什么问题。

开发者经常混淆 Hash加密(encryption)编码(encoding),因为它们都会把数据变成另一种形式,但解决的问题完全不同。

编码:改变表示方式,不是保护

编码用于传输或存储格式转换。例如 Base64 把二进制变成可打印 ASCII,收到编码文本的人通常可以直接解码还原。编码的设计目标就是可逆。

加密:用密钥保护机密性

加密保护数据机密性。持有正确密钥时,密文可以解密回明文;没有密钥时,解密应难以实现。加密回答的问题是:如何让只有授权方能够读取?

Hash:指纹,不是保密

Hash 生成用于对比和完整性校验的摘要,正常使用下是单向的。Hash 回答的问题是:这些字节是否与已知指纹一致? 它不能阻止已经拥有原始输入的人重新计算相同 Hash。

快速对比

机制可逆?典型目标
编码传输 / 展示格式
加密是(需密钥)机密性
Hash否(实际不可逆)完整性 / 对比

常见误区

有团队会把敏感值做 Base64 后就认为“已保护”。Base64 不是加密。同样,公布文件的 MD5 可以帮助他人校验完整性,但如果对方已经拿到文件,Hash 并不能阻止其读取内容。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览