下载文件时官网会提供 MD5 或 SHA256 校验值。这两种算法有什么区别?为什么现在都推荐 SHA-256?本文讲清原理和选型。
哈希把任意长度输入压缩为固定长度摘要(MD5 为 128 位,SHA-1 为 160 位,SHA-256 为 256 位)。核心特性:相同输入必得相同输出、不可逆、抗碰撞。
MD5 已被证明存在实际可用的碰撞构造方法,几秒内即可构造出两个 MD5 相同的不同文件。MD5 不能用于密码存储和数字签名,但仍可用于非安全场景的文件完整性快速校验。
安全场景选 SHA-256 或更高;对性能敏感且经安全评估的场景可用 SHA-1 但不推荐新项目使用。密码存储不要直接用哈希,应使用 bcrypt 等慢哈希加盐方案。
下载大文件后,用哈希工具计算本地文件摘要,与官网公布的 SHA256 值逐字符比对,一致则文件完整未被篡改。
不能。哈希不可逆,网上所谓的 MD5 解密是用彩虹表反查常见字符串,对加盐的随机串无效。
内容不变则 MD5 不变;改一个字节甚至改文件名再改回来,内容相同 MD5 仍相同。
输出 256 位,暴力碰撞在计算上不可行,目前是安全的主流选择。