下载安装包时,官网旁边总跟着一串「校验值」;登录网站时,你的密码其实也没被明文保存——这些都靠同一个技术:哈希(Hash)。它是把任意内容压缩成固定长度「指纹」的算法,理解了它,很多安全常识就通了。
软件官网公布的 SHA256 校验值,就是你验证「下载的文件是否原封不动」的凭据:
同理的日常用法:把哈希值当「文件指纹」排查重复文件——两份内容不同的文件哈希几乎不可能相同,比按文件名找重复靠谱得多。
| 算法 | 长度 | 现状 |
|---|---|---|
| MD5 | 128 位(32 字符) | 已被碰撞攻破,仅用于非安全的完整性比对(如排查重复文件) |
| SHA-1 | 160 位 | 已不安全,逐步淘汰 |
| SHA-256 | 256 位 | 当前主流,文件校验、数字签名通用 |
| SHA-512 | 512 位 | 更长的输出,安全余量更大 |
「碰撞」指两个不同输入算出同一哈希值。MD5 已被证实可以人为构造碰撞,所以安全场景(签名、密码)不要再依赖 MD5;校验下载文件用 SHA-256 是当下标准做法。CRC32 更短更快,只能查传输误码,完全不具备防篡改能力。
正规网站根本不存你的明文密码,存的是「加盐哈希」:给密码拼上一段随机字符串(盐)再算哈希。所以忘记密码时只能「重置」而不是「找回」——如果哪个网站能直接发你的原密码给你,说明它明文存储密码,是危险信号。加盐的目的:让不同用户的相同密码哈希值不同,防止攻击者用预先计算好的彩虹表批量破解。
问:哈希能用来「加密」文件吗?
不能。哈希不可逆,只能「验指纹」,不能「取回内容」。需要保密传输请用加密(如 AES),两者是完全不同的工具。
问:两个不同文件的 MD5 一样,说明什么?
要么文件真的相同,要么遇到人为构造的 MD5 碰撞(对老算法是可行的攻击)。安全相关判断请改用 SHA-256 复核。
问:为什么我算的哈希和官网不一样?
常见原因:下载不完整、官网发布的是另一个版本文件的校验值、或复制时混入空格换行。先排除传输问题,再逐字符比对。