Hashing的应用场景和经典故事.PDF

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hashing的应用场景和经典故事.PDF

Hashing的应用场景和经典故事 陈巍 161180012 2018.5.28 散列表 哈希表(Hash table,也叫散列表),是根据关键码值而直接进行访问的数据 结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加 快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 Hash Table的查询速度非常的快,几乎是O(1)的时间复杂度。 散列函数 除法散列法 通过取k除以m的余数,来将关键字k映射到m个槽 的某一个里面去,即h(k)=k mod m。 乘法散列法 用关键字k乘上常数A(0A1),并抽取出kA的小数部 分,然后用m乘以这个值,再取结果的底,即h(k)= m(kA mod 1) 斐波那契法 等等 解决碰撞 哈希表中,一个关键字可能可能对应了多个值,这就造成了冲突。 在开放寻址法中我们可以通过下面几种方法解决。 线性探查 h(k,i)=(h(k)+i)mod m,i=0,1,...,m-1 给定关键字k,先探查的槽是T[h(k)] ,然后是T[h(k)+1],直至T[m-1],线性探查 实现较为容易,但随着时间推移,平均查找时间会不断增加。 二次探查 2 h(k,i)=(h(k)+c1i+c2i ) mod m 初始的探查位置为T[h(k)] ,后续的探查位置要在此基础上加一个偏移量。 双重散列 h(k,i)=(h1(k)+ih2(k)) mod m 与前面两个探查不一样的是,这里的探查序列以两种方式依赖于关键字k。 建立公共溢出区 广泛使用的哈希算法 (1)MD4 MD4(RFC 1320)是MIT 的Ronald L. Rivest 在1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它 是基于32 位操作数的位操作来实现的。 (2 )MD5 MD5(RFC 1321)是Rivest 于1991年对MD4的改进版本。它对输入仍以 512位分组,其输出是4个32位字的级联,与MD4 相同。MD5比MD4来得复 杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。 (3 )SHA-1及其他 SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入, 产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时 基于和MD4相同原理,并且模仿了该算法。 哈希算法的应用 (1)文件校验 我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改 的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数 据的恶意破坏。 MD5 Hash算法的数字指纹特性,使它成为目前应用最广泛的一种文件完整性 校验和Checksum算法,不少Unix系统有提供计算md5 checksum的命令。 (2 )数字签名 Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算 速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称数字摘要进行数字签名,在统计上可以认为与对文件本身进行数字 签名是等效的。 (3 )加密算法 哈希算法也是非常常见的加密算法之一。他和对称算法以及非对称算法最大的 区别是,它不是用来做数据传输,而是对数据是否被篡改加以验证,防止不法分子 篡改数据。它的特点是无论原文多长都会变成固定长度的字符串,只能加密不能解 密(只能单向运算)。对于不同的输入,理论上会生成不同的输出(部分算法已出 现大规模碰撞,碰撞就是指不同明文相同密文的情况)。 哈希算法的历史 哈希的想法在不同的地方独立出现。 1953年1月,Hans Peter Luhn撰写了一份IBM内部备忘录,首先提出了散列表 这一技术,以及用于解决碰撞的链接方法。 差不多同一时间,Gene Amdahl首先提出了开放寻址的想法。 Carter和Wegman于1979年引入了全域散列函数类的概念。 Fredman、Komlos和Szemeredi针对静态关键字集合,提出了完全散列方案。 Dietzfelbinger等人后来又将这一方法扩展至动态关键字集合上,其处理插入 和删除操作的平均期

文档评论(0)

sunguohong + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档