哈希不是加密
一个常见的误解是把哈希当成"打乱了但还能还原"的数据形式,实际上并不存在任何密钥或流程能把哈希值还原成原始输入。这正是为什么哈希被用来验证数据(证明两份内容是否一致),而不是用来保护那些以后还需要取回原文的数据。
为什么密码不能只靠普通哈希来保护
直接存储密码的SHA-256哈希值仍然容易受到预先计算好的彩虹表和暴力破解攻击,因为同一个密码永远会得到同一个哈希值。真正的密码存储系统会为每个用户加上随机的"盐值",并使用专门设计得很慢的算法(比如bcrypt或Argon2),而SHA-256这类通用的快速哈希算法并不适合这个用途。
常见问题
两个文件的哈希值一样,就一定说明这两个文件完全相同吗?
对SHA-256、SHA-384、SHA-512来说,在实际使用中可以这么认为,偶然发生碰撞的概率低到几乎不可能。但SHA-1已经被证实可以人为制造出碰撞,所以不应该再用它来做安全性要求高的完整性校验。
可以用哈希生成器来检查下载的文件是否损坏吗?
可以,这正是哈希最常见也最正当的用途之一。把发布方提供的哈希值,和你用下载下来的文件重新生成的哈希值进行比较,如果一致,就说明文件在传输过程中没有被篡改或损坏。