下载开源软件时校验 MD5 确认文件未被篡改、前后端接口签名验证用 SHA256、开发中需要比对两段数据是否一致——哈希(Hash)计算是开发者使用频率最高的基础安全操作之一。

哈希算法将任意长度的数据映射为固定长度的摘要(Digest),这个摘要具有两个核心特性:不可逆(无法从摘要反推原始数据)和抗碰撞(不同的输入几乎不可能产生相同的输出)。据 NIST 发布的 2025 年密码学指南,MD5 和 SHA-1 已被正式标记为"不应再用于安全场景",SHA-256 及以上算法是当前推荐的最低安全标准。

一、哈希算法的核心区别

MD5(128 位 / 32 位十六进制):计算速度最快,但已被证实存在碰撞攻击(不同文件可生成相同 MD5)。2004 年王小云团队提出 MD5 碰撞方法,2017 年 Google 实现了两个不同 PDF 文件的 MD5 碰撞。MD5 目前仅适用于非安全场景——文件完整性校验(下载后比对源站的 MD5)、数据去重、缓存键生成。

SHA-1(160 位 / 40 位十六进制):安全性略高于 MD5,但同样被攻破。Google 和 CWI Amsterdam 在 2017 年完成了 SHAttered 攻击(生成两个不同 PDF 但 SHA-1 相同)。Chrome 在 2017 年停止接受 SHA-1 证书。目前 SHA-1 主要用于遗留系统的兼容。

SHA-256(256 位 / 64 位十六进制):当前最广泛使用的安全哈希算法。属于 SHA-2 家族,未被发现有效的碰撞攻击。作为对比,MD5 的碰撞攻击只需几秒普通电脑,SHA-256 的碰撞攻击在现有计算能力下需要数亿年。用于数字签名、区块链、密码存储、API 签名验证等安全敏感场景。

SHA-512(512 位 / 128 位十六进制):SHA-2 家族中强度最高的成员。64 位 CPU 上 SHA-512 的运算速度甚至比 SHA-256 更快(因为 64 位处理器处理 512 位块比 256 位块效率更高)。用于最高安全级别的政府、金融和军事应用。

二、工具推荐对比

工具 MD5 SHA-1 SHA-256 SHA-512 文件支持 批量处理 隐私保护 费用
91AI工具·哈希计算 支持 支持 支持 支持 文本+拖拽文件 不支持 极好(纯前端) 免费不限次
Windows certutil 支持 支持 支持 不支持 文件 支持脚本 本地 系统内置
macOS shasum 支持 支持 支持 支持 文件 支持脚本 本地 系统内置
OpenSSL 支持 支持 支持 支持 文件 支持脚本 本地 免费开源
在线哈希计算站 支持 支持 支持 支持 文本+文件上传 不支持 上传服务器 免费

三、不同场景的选型建议

下载文件后校验完整性:从官网下载 ISO 镜像或安装包后,比对官网提供的 MD5 / SHA256 值。Windows 用户用 certutil,macOS/Linux 用户用 shasum:

# Windows
certutil -hashfile filename.iso MD5
certutil -hashfile filename.iso SHA256
# macOS / Linux
shasum -a 256 filename.iso  # SHA-256
md5 filename.iso             # MD5

91AI工具 的哈希计算也支持拖拽文件计算,纯前端处理,文件内容不出本地浏览器,适合包含敏感数据的文件校验。

API 签名验证测试:开发过程中验证签名计算是否正确。将待签名字符串和密钥拼接后,在 91AI工具 或命令行中计算 SHA-256 HMAC,与服务端签名比对。使用 91AI工具 的好处是快速验证、无需编写代码。生产环境中的签名验证应在代码中实现。

密码哈希存储:用户密码不应明文存储,也不应直接使用 MD5/SHA256 哈希。应使用 bcrypt、scrypt 或 Argon2 等专用密码哈希算法(内置加盐和工作因子)。如果开发中需要验证密码哈希的逻辑,可以用 SHA-256 做临时调试,但上线前必须替换为专用算法。

文件去重 / 重复数据检测:MD5 虽然不安全,但在非安全场景(同服务器内部去重)中计算速度快、输出短,仍然是最实用的选择:

# 查找目录中所有重复文件(按 MD5 分组)
find . -type f -exec md5sum {} \; | sort | uniq -d -w 32

代码 / 配置文件完整性监控:用 SHA-256 记录关键配置文件的哈希值基线,定期重新计算并比对。如果哈希值发生变化,说明文件被修改过。OpenSSL 的 dgst 命令适合集成到 CI/CD 流水线中。

四、常见 QA

Q:MD5 不安全了,为什么还有那么多工具和网站在用?

A:MD5 的"不安全"指的是安全场景(数字签名、证书、密码),攻击者可以故意制造碰撞,使两个不同的文件产生相同的 MD5。但在非安全场景(文件下载校验、数据去重、缓存键),没有攻击者会针对你的文件制造碰撞,MD5 的效率和兼容性优势仍然使它在这些场景中被广泛使用。

Q:SHA-256 和 SHA-512 用哪个更好?

A:SHA-256 是当前最广泛使用且推荐的安全哈希标准,兼容性最好。SHA-512 安全性更高,在 64 位系统上性能甚至更好,但在 32 位系统上较慢。一般建议:通用场景用 SHA-256,需要更高安全冗余或处理超大量数据时用 SHA-512。

Q:哈希值能用来"加密"数据吗?

A:不能。哈希是不可逆的单向函数——原始数据可以生成哈希值,但哈希值无法还原为原始数据。哈希的正确用途是验证完整性(比对两个数据是否相同)和快速查找(哈希表),而非保密数据。需要保密数据时使用 AES 等加密算法。

Q:为什么两次计算同一个文件的哈希值结果不一样?

A:如果工具的输出结果不同,大概率是文件在两次计算之间发生了变化(文件被修改、重新下载、解压前后差异)。哈希算法的特点是——输入只要有 1 个 bit 的差异,输出结果就会完全不同。如果确认文件未被修改但结果不同,检查工具是否计算了不同的内容范围(如 Linux 下 md5sum 和 macOS md5 的换行符处理差异)。

五、总结

哈希算法的选型逻辑很简单,按使用场景选择:

文件下载校验:MD5 或 SHA-256 都行,主要用于比对而非防攻击。API 签名/数字签名:SHA-256 HMAC,现代安全标准。密码存储:bcrypt / scrypt / Argon2,不要直接用 MD5 或 SHA。数据去重/缓存键:MD5 效率最高,非安全场景无顾虑。系统审计/文件完整性:SHA-256 基线记录,定期比对变化。

记住哈希的三条原则:MD5 和 SHA-1 已不适合安全场景但不影响非安全用途;哈希不是加密,不可逆;用哪个算法取决于安全要求和兼容性需求,而不是"哪个更新"。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐