散列的意义何在?

What is the point of hashing?

散列使用的一个典型例子是密码或敏感数据的存储,因为这种加密形式是不可逆的,但如果无法解密,为什么要存储它?唯一可能的用途(据我所知)是让用户输入密码,让程序对其进行哈希处理,然后检查用户输入的哈希值是否与该用户存储的哈希值相同。这是一个(或唯一)正确的场景吗?我在这里错过了什么?如果不是这种情况,那么如何检查密码的正确性,为什么不直接删除数据而不是单向加密呢?

A typical example of hashing use would be the storage of passwords

散列的目的(通常)是创建一个固定大小的 thumbprint 任意大小的输入。 加密哈希 具有额外的属性 - 在这种情况下最重要的是很难(不可能)导出有关输入的任何信息并创建副本(有意或无意)。

所以散列函数还有其他用途:

  • 匿名数据
  • 完整性检查,数据未更改
  • 引用大量内容
  • ...

but if it cannot be decrypted, why store it?

因为我们可以比较两个内容是否相同,而无需了解或阅读内容本身。

or sensitive data because this form of encryption is irreversible

不,不存储任何信息。 哈希不是任何形式的加密

The only possible use (from my limited knowledge) would be to have a user enter a password, have a program hash it and then check whether the user input hash is the same as the stored hash for said user. Is that a (or the only) correct scenario?

基本上是的。现实情况要复杂一些,为了存储用户凭证,我们今天最知名的选择是 slow salted hash,因此 PBKDF2、BCrypt、SCrypt 或 Argon2。

and why not just delete the data instead of one-way encrypt it?

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