哈希的意义何在?
Posted
技术标签:
【中文标题】哈希的意义何在?【英文标题】:What is the point of hashing? 【发布时间】:2021-12-21 01:57:12 【问题描述】:哈希使用的典型示例是存储密码或敏感数据,因为这种加密形式是不可逆的,但如果无法解密,为什么要存储它?唯一可能的用途(根据我的有限知识)是让用户输入密码,让程序对其进行哈希处理,然后检查用户输入的哈希值是否与所述用户的存储哈希值相同。这是一个(或唯一)正确的场景吗?我在这里想念什么?如果不是这样,那么如何检查密码的正确性,为什么不直接删除数据而不是单向加密呢?
【问题讨论】:
散列 != 加密。哈希是单向函数。开始阅读how-to-securely-hash-passwords 【参考方案1】:使用散列的典型例子是密码的存储
散列的目的(通常)是为任意大小的输入创建一个固定大小的thumbprint。 加密哈希具有额外的属性 - 在这种情况下,最重要的是很难(不可能)导出有关输入的任何信息并创建副本(有意或无意)。
所以哈希函数还有其他用途:
匿名化数据 完整性检查,数据未更改 引用大型内容 ...但如果不能解密,为什么要存储呢?
因为我们可以比较两个内容是否相同,而无需知道或阅读内容本身。
或敏感数据,因为这种加密形式是不可逆的
不,不存储任何信息。 哈希不是任何形式的加密。
唯一可能的用途(据我所知)是让用户输入密码,让程序对其进行散列,然后检查用户输入的散列是否与所述用户的存储散列相同。这是一个(或唯一一个)正确的场景吗?
基本上是的。现实有点复杂,为了存储用户凭据,我们目前最知名的选项是slow salted hash,因此是 PBKDF2、BCrypt、SCrypt 或 Argon2。
为什么不直接删除数据而不是单向加密呢?
因为你需要比较用户密码(它是哈希)是否正确。或者检查一些数据是否没有改变。
【讨论】:
以上是关于哈希的意义何在?的主要内容,如果未能解决你的问题,请参考以下文章