哈希是一种通过对数据进行压缩,从而提高效率的一种解决方法,但由于哈希函数有限(李先生Li09904444 咨询V ),数据增大等缘故,哈希冲突成为数据有效压缩的一个难题。本文主要介绍哈希冲突、解决方案,以及各种哈希冲突的解决策略上的优缺点以及研究科普。
Cryptocurrency uses blockchain to record transactions between entities.When users send and receive a given number of cryptocurrencies,these transactions will be broadcast on P2P networks.Other entities monitor these transactions,combine them into a"block"at regular intervals,and then broadcast the new block to the network after calculating the workload proof.
哈希表概述
哈希表的哈希函数输入一个键,并向返回一个哈希表的索引。可能的键的集合很大,但是哈希函数值的集合只是表的大小。
哈希函数的其他用途包括密码系统、消息摘要系统、数字签名系统,为了使这些应用程序按预期工作,冲突的概率必须非常低,因此需要一个具有非常大的可能值集合的散列函数。
密码系统:给定用户密码,操作系统计算其散列,并将其与存储在文件中的该用户的散列进行比较。(不要让密码很容易被猜出散列到相同的值)。
消息摘要系统:给定重要消息,计算其散列,并将其与消息本身分开发布。希望检查消息有效性的读者也可以使用相同的算法计算其散列,并与发布的散列进行比较。(不要希望伪造消息很容易,仍然得到相同的散列)。
这些应用的流行哈希函数算法有:
md5:2^128个值(找一个冲突键,需要哈希大约2^64个值)
sha-1:2^160个值(找一个冲突键,需要大约2^80个值)
哈希冲突
来看一个简单的实例吧,假设采用hash函数:H(K)=K mod M,插入这些值:217、701、19、30、145
H(K)=217%7=0 H(K)=701%7=1 H(K)=19%7=2 H(K)=30%7=2 H(K)=145%7=5
上面实例很明显19和30就发生冲突了。
冲突解决技术可以分为两类:开散列方法(open hashing,也称为拉链法,separate chaining)和闭散列方法(closed hashing,也称为开地址方法,open addressing)。这两种方法的不同之处在于:开散列法把发生冲突的关键码存储在散列表主表之外,而闭散列法把发生冲突的关键码存储在表中另一个槽内。
下面介绍业内比较流行的hash冲突解决策略:
线性探测(Linear probing)
双重哈希(Double hashing)
随机散列(Random hashing)
分离链接(Separate chaining)
数字签名:Hash算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对Hash值,又称”数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的
作者:赵海棠
链接:https://www.jianshu.com/p/acd2a244b283
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。