编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 名词解释 / 哈希

哈希

哈希(又称散列、hash)是把任意长度的输入,通过固定算法映射成固定长度输出的函数,输出结果称为哈希值或摘要(digest)。比如一段几 MB 的文件和一个短字符串,经 SHA-256 计算后都会得到一串 64 位十六进制字符。它的核心特性有:

正因如此,哈希常用于校验文件完整性、给数据做指纹去重、哈希表索引,以及配合盐值存储密码。要特别注意:哈希不是加密——加密可用密钥把密文还原成明文,哈希则不可逆、也不存在「解密」;网上所谓「MD5 解密」其实是查彩虹表撞出来的。此外,MD5SHA-1 已被发现可人为构造碰撞,别再用于安全场景;CRC32 只是校验和,用来检测传输错误,不具备抗攻击能力;存储密码应使用带盐的慢哈希(如 bcrypt、argon2),而不是直接套一层 MD5 或 SHA-256。

常见问题

哈希和加密是一回事吗?
不是。加密是可逆的,持有密钥就能把密文还原成明文;哈希是单向的,只能由原文算出哈希值,无法反推,也没有密钥和解密过程。所以哈希适合做校验和指纹,不能用来保存以后还需要还原的数据。
为什么两个不同的输入可能得到相同的哈希值?
因为输入是无限的、而输出长度固定,理论上必然存在「碰撞」。好的算法让碰撞极难被人为构造;但 MD5、SHA-1 已经能被刻意制造碰撞,涉及安全时应改用 SHA-256 等更强的算法。
存用户密码为什么不建议直接用 MD5 或 SHA-256?
这类通用哈希算得太快,一旦数据库泄露,攻击者可用彩虹表或暴力枚举快速反查,弱密码尤其危险。应改用专门的慢哈希(bcrypt、scrypt、argon2)并为每个密码加随机盐,让破解成本大幅提高。

相关工具

相关名词