主要思想
能将任意长度的二进制明文映射为较短的二进制串的算法,并且不同的明文很难映射为相同的hash值。
相当于空间映射函数,从一个非常大的取值空间映射到一个非常小的取值空间,[李宵宵1] 由于不是一对一的映射,hash函数转换后不可逆,即不能通过逆操作还原出原始的值。
算法主要思想:根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(成为hash函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将节点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里取值。通过hash方法可以对节点进行快速检索。
特点:
Hash值又称为指纹或者摘要,具有以下特点:
正向快速:给定明文和hash算法,在有限时间和有限资源内能计算得到hash值
逆向困难:给定hash值,在有限时间内很难逆推出明文
输入敏感:原始输入信息发生任何变化,新的hash值都应该出现很大变化
冲突避免:很难找到两段不同的明文,使得它们的hash值一致
常见的hash算法
Hash算法有MD5和SHA系列,目前MD5和SHA1已经被破解,一般推荐至少使用SHA2-256算法
- MD4:MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32 位操作数的位操作来实现的
- MD5:MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好
- SHA-1及其他:SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
应用场景
1. 数据加密:HASH算法常用于对数据进行加密,保护数据的安全性和完整性。
2. 数字签名:HASH算法可以用于生成数字签名,用于验证数据的来源和完整性。
3. 数据校验:HASH算法可以用于验证数据的完整性,例如在文件传输过程中对文件进行HASH校验,以确保文件在传输过程中没有被篡改。
4. 密码存储:HASH算法可以用于存储用户密码的安全性,将用户密码进行HASH加密后存储在数据库中,以防止密码泄露。
5. 数据指纹:HASH算法可以用于生成数据的指纹,用于快速比较数据的差异和重复性,例如在数据去重、数据比对等场景中应用广泛。
6. 安全认证:HASH算法可以用于生成安全认证令牌,用于验证用户的身份和权限。
[李宵宵1]多对一?如何保证唯一性?