到底什么是hash

1.什么是hash算法 Hash(散列、杂凑)算法,是把任意长度的输入经过特定的算法变换成固定长度的输出,输出的值就是hash值。这个特定的算法就叫hash算法,hash算法并非一个固定不变的算法。只要是能达到这个目的的算法均可以说hash算法。例如MD5,SHA,String.hashcode()都是hash算法。另外不一样的输入可能会得出相同的hash值,那么这种现象称为hash碰撞,不管是采用那种hash算法,hash碰撞都是不可避免的,咱们只能经过改进hash算法,把出现碰撞的几率下降。PS:hash这个词在由于英语中的意思是剁碎的食物,反应在计算机领域的意思大概就是把任意的数据切割打碎,输出固定长度的数据,因此经过hash这个单词也能大概理解hash算法的意思。 2.hash算法的应用 2.1 哈希表 因为用途的不一样,hash在数据结构中的含义和密码学中的含义并不相同。因此在这两种不一样的领域里,算法的设计侧重点也不一样。在数据结构中,咱们利用hash值来创建以key-value形式的数据结构——哈希表(散列表),使用哈希表咱们能够实现对特定value的快速查找,时间复杂度为O(1);若是是普通的数组或者链表的数据结构,只能经过遍历的方式对特定value值的查找,时间复杂度为O(n);若是数组是有序的,那么能够经过二分查找,或者即便使用平衡二叉树的数据结构,时间复杂度为O(logN),都不如哈希表高效。但若是hash值出现频繁的碰撞,哈希表的查找效率就会下降,最坏的状况就会变成数组或者链表,复杂度降为O(n),所以数据结构中的hash算法应该要能均匀的输出hash值,使key能均匀的分布在不一样的桶中。 算法

2.2 密码学 hash算法也能够理解为一种压缩映射,把任意长度的信息压缩成固定长度,在密码学上把通过hash算法计算压缩后的数据称为信息摘要。 咱们能够经过对比信息摘要来检验数据的完整性,防止数据在传输过程当中被篡改。例如在http协议中传递参数a=1&b=2&hash=xxx,咱们经过计算参数a=1&b=2+privateKey(一个双方都知道的密钥)的hash值,并将这个hash值也一并传递,那么接收方经过从新计算参数的hash值并与传递过来的hash进行对比,若是不一致那么就说明参数在传递过程当中被人篡改了。因此密码学中的hash算法要有很强的抗篡改能力,对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会很是大。 数组

相关文章
相关标签/搜索