首先,什么是哈希算法 哈希算法,也称为散列算法和杂凑算法,是一种从任意文件创建小数字指纹的方法。哈希算法和指纹一样,是用简短的信息保证文件唯一性的标志。这个符号关系到文件的每一个字节,很难找到逆规律。因此,当原始文件发生变化时,其标志值也会发生变化,从而告诉文件用户当前文件不再是您需要的文件。 哈希算法可以将任意长度的二进制明文映射到更短的二进制字符串,不同的明文很难映射到同一个哈希值。 也可以理解为空间映射函数,从很大的值空间映射到很小的值空间。由于不是一一映射,哈希函数在转换后是不可逆的,也就是说不可能通过逆向运算和哈希值来恢复原来的值。 哈希法的主要思想是根据节点的键值来确定节点的存储地址:以键值K为自变量,通过一定的函数关系h(K)(称为哈希函数),计算出相应的函数值,将其解释为节点的存储地址,节点存储在这个存储单元中。搜索的时候用同样的方法计算地址,然后去对应的单元,得到你要找的节点。哈希方法可以用来快速搜索节点。哈希(也叫“Hash”)是一种重要的存储方式,也是一种常用的检索
二、哈希算法有什么特点? 哈希值也称为指纹或摘要,具有以下特征: 快速:给定明文和哈希算法,可以在有限的时间和有限的资源内计算出哈希值。 反转难度:给定哈希值,很难在有限的时间内反转明文。 输入敏感度:原始输入信息的任何变化,新的哈希值都应该有很大的变化。 冲突避免:很难找到两个内容不同的明文,使它们的哈希值一致。 3.哈希算法有哪些? 常见的哈希算法有MD5和SHA系列。目前,MD5和SHA1已经被破解。一般建议至少使用SHA2-256算法。 我们来看看写哈希函数需要注意什么。首先我们要明白,Hash函数将大范围映射到小范围,目的往往是为了节省空间,让数据易于保存。此外,哈希函数也将应用于搜索。
4.哈希算法冲突 稍微思考一下就可以发现,既然输入数据不是定长的,但是输出哈希值是定长的,也就是说哈希值是有限集,而输入数据可以是无限多的,那么建立一一对应的关系显然是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有更好的防碰撞