UPTools UPTools
安全 主笔:工具匠

SHA-256 是什么?文件校验与密码存储原理

下载完一个安装包,官网常会让你「校验 SHA-256」;用户密码存进数据库前也要「哈希」一下。哈希(Hash)在这些场景里反复出现,却常被和「加密」搞混。本文讲清 SHA-256 的工作原理、哈希的核心特性,以及为什么密码不能直接 hash。

哈希的三大特性

哈希函数把任意长度的输入,计算成一段固定长度的摘要(比如 SHA-256 永远输出 64 位十六进制字符串)。它有三个关键特性:

  • 确定性:相同的输入,永远得到相同的输出。
  • 单向性:无法从摘要反推出原文。
  • 抗碰撞:几乎不可能找到两个不同的输入产生相同摘要。

注意「固定长度」——无论输入是 1 个字节还是 10GB,SHA-256 的输出都是 64 个字符。这也是它能当「指纹」用的原因。

SHA-2 族与 MD5 的退役

SHA-256 属于 SHA-2 族(还有 SHA-512 等),是目前推荐的安全哈希算法。而 MD5、SHA-1 已经被证明存在安全缺陷(能人为制造碰撞),不再适合安全场景——浏览器 Web Crypto API 因此干脆不支持 MD5。

用途一:文件完整性校验

下载大文件后,对比官方公布的 SHA-256:

  1. 在本地计算下载文件的 SHA-256。
  2. 和官网公布的摘要逐字符比对。
  3. 完全一致,说明文件未损坏、未被篡改。

这在系统镜像、安装包分发中非常常见,能防止下载被劫持或传输损坏。

用途二:密码存储(不能直接 hash)

很多人以为密码存储就是「把密码 hash 一下存数据库」,这只对了一半。直接 hash 密码是危险的——攻击者可以用「彩虹表」(预计算的密码-哈希对照表)反查出弱密码。

正确做法是:

  • 盐(salt):每个密码配一个随机盐,一起哈希,让彩虹表失效。
  • 慢哈希算法:如 bcrypt、scrypt、argon2,故意让计算变慢,大幅提高暴力破解成本。

哈希不是加密

最后澄清一个根本误解:哈希没有「解密」这回事

  • 加密是双向的(能加密就能解密)。
  • 哈希是单向的(算出摘要就回不去了)。

网上所谓「MD5 在线破解」,本质是对常见弱密码的彩虹表反查,并不能还原任意内容。

实操

想计算文件或文本的 SHA-256/SHA-512、验证文件完整性,可以用 UPTools Hash 生成工具,基于浏览器 Web Crypto API 本地计算,数据不上传。

总结

SHA-256 适合做完整性校验和数据指纹;存储密码要用盐 + 慢哈希(bcrypt/scrypt/argon2);哈希是单向的,不存在解密。理解了这些,就不会再把哈希误当加密用了。

相关文章