散列函数

散列函数是一种接受可变长输入并产生固定长度输出(也称为摘要或简称“散列值”)的函数。散列函数应该尽可能快地计算,并且不同的输入应尽可能产生不同的输出(这称为“抗碰撞性”)。

散列函数有密码学和非密码学的用途。在密码学之外,例如,散列函数可以用于生成关联数组(如映射或字典)的键。

SubtleCrypto 接口的 digest() 函数为 Web 应用程序提供了若干可用的散列函数。

密码散列函数

散列函数在密码学中有许多应用,包括数字签名消息认证码

并非所有的散列函数都适合用于密码学。要用于密码学,散列函数必须满足以下条件:

  • 计算快速
  • 单向:给定输出,重新生成原始输入应该是不切实际或不可能的
  • 抗篡改:对输入的任何更改都会导致不同的输出
  • 抗碰撞:找到两个不同的输入产生相同的输出应该是不切实际的

密码学中最常用的散列函数来自 SHA-2(安全散列算法 2)家族,其名称为 "SHA-" 后跟输出摘要的长度(以位为单位):例如,"SHA-256""SHA-512"

SHA-2 是 SHA-1 算法的继任者,后者不再被认为是安全的,不应在密码学中使用。请注意,MD5 算法也被认为是不安全的。

参见