哈希的意义何在?

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。

为什么不直接删除数据而不是单向加密呢?

因为你需要比较用户密码(它是哈希)是否正确。或者检查一些数据是否没有改变。

【讨论】:

以上是关于哈希的意义何在?的主要内容,如果未能解决你的问题,请参考以下文章

ECMA-262-v6 中的“符号”类型有啥意义?

什么是哈希?哈希算法原理解释,什么是分布式存储(视频)

持久哈希表实现

C 的哈希表实现

HASH 字符串哈希 映射转化

区块链百科|关于哈希算法,你需要知道的事