2023-01-09 19:55:32
哈希算法虽然能够带来许多帮助,但是也会产生许多碰撞,还好现在发展了很多处理哈希碰撞冲突的方法,哈希表是一个在时间和空间上做出权衡的经典例子,如果没有内存限制,那么可以直接将键作为数组的索引,那么所有的查找时间复杂度为O(1),如果没有时间限制,那么我们可以使用无序数组并进行顺序查找,这样只需要很少的内存,另外,哈希算法不可逆,讲到这,大家可能会好奇哈希算法为什么是不可逆的?下面211Coin小编为大家分析。
因为一个哈希值对应无数个明文,理论上你并不知道哪个是。不一定要可逆才能攻击,譬如说将密码哈希后储存,我并不需要得到明文,只要找到一个东西可以算出同样的哈希值就能登陆。尽管理论上不可逆,但实际操作中密码通常不可能足够长,所以一个哈希值所对应的明文中最短的那个很大概率是密码。
哈希表就是一种以键-值(key-indexed)存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。
1.MD4
MD4(RFC1320)是MIT的RonaldL.Rivest在1990年设计的,MD是MessageDigest(消息摘要)的缩写。它适用在32位字长的处理器上用高速软件实现——它是基于32位操作数的位操作来实现的。
2.MD5
MD5(RFC1321)是Rivest于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与MD4相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
3.SHA-1及其他
SHA1是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且模仿了该算法。
4.一致性hash算法
为了减少碰撞,按照一定的物理规律模拟出来一个环,将自己的有限资源分布在环上,然后每当一个请求寻址过来时,按照计算给予分配环上的资源。以上这句话是本人自己总结的,里面有几个问题:
1.环的构造方式是什么?
2.怎样将有限的资源在环上分配?
3.怎样合理有效的分配资源?
4.怎样判断构造的环的优缺?
5.Hash碰撞及避免碰撞策略
对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。
上述内容介绍了哈希算法为什么是不可逆的?从哈希算法的原理进行介绍,让大家明白了哈希算法不可逆的原因,另外,当发生冲突时,使用第二个、第三个、哈希函数计算地址,直到无冲突时,但也会有缺点,计算时间增加,比如上面第一次按照姓首字母进行哈希,如果产生冲突可以按照姓字母首字母第二位进行哈希,再冲突,第三位,直到不冲突为止,这种方法不易产生聚集,但增加了计算时间,所以在了解的时候还要有详细的分析,明白其中的劣势和不足。
好文章,需要你的鼓励
Copyright © 2018-2022 211COIN版权所有.