哈希算法加密设计求助

新一代哈希函数FPGA设计实现—硕士毕业论文下载
很抱谦,您的浏览器并不支持 IFrame,请与管理员联系,也可。
新一代哈希函数FPGA设计实现
硕士博士毕业论文站内搜索
全站论文库
硕士博士论文库
普通期刊论文库
分类:→工业技术论文→→→
新一代哈希函数FPGA设计实现
论文目录&摘要第1-5页 Abstract第5-9页 第一章 绪论第9-11页   · 研究背景第9页   · 论文的来源及主要工作第9-10页   · 论文的章节安排第10-11页 第二章 认证算法技术研究第11-21页   · GHASH认证算法技术第11-14页     · Ghash算法基础第11-13页     · Ghash算法第13-14页   · SHA-3认证算法技术第14-20页     · 针对SHA-3硬件评估平台第15-17页     · SHA-3候选者硬件实现设计策略第17页     · Cryptographic FPGA结构设计第17-20页   · 小结第20-21页 第三章 GHASH键技术研究第21-38页   · GF(2~M)并行乘法器第21-27页     · GF(2m)并行乘法器结构设计第22-24页     · GF(2~m)并行乘法器硬件设计结构第24-25页     · 复杂度分析第25-26页     · 适用于Ghash函数的128位有限域乘法器硬件结构第26-27页   · 一种改进的GF(2~M)乘法器结构设计及实现第27-37页     · 串并结合乘法器结构设计第28-30页     · 串并结合乘法器复杂度分析第30-35页     · 支持千兆速率的Ghash函数128位有限域乘法器硬件结构第35-37页   · 小结第37-38页 第四章 GHASH应用技术研究第38-50页   · GMAC第38-43页     · GMAC认证方式第38-39页     · 采用GMAC的10G EPON认证机制第39-43页   · GCM第43-49页     · 认证加密第43-44页     · 认证解密第44-45页     · 基于GCM的XG-PON加密认证流程第45-49页   · 小结第49-50页 第五章 SHA-3候选算法LUFFA算法的设计实现及优化方案第50-62页   · 八个SHA-3候选算法硬件性能分析第50-51页   · LUFFA候选算法原理第51-54页   · LUFFA算法的设计实现第54-55页   · LUFFA算法的FPGA LOOKUPTABLE优化设计第55-56页   · LUFFA算法的FPGA UNFOLDING优化设计第56-58页   · LUFFA算法的优化性能比较第58-59页   · LUFFA算法的优化性能分析第59-61页   · 小结第61-62页 第六章 总结和展望第62-63页 致谢第63-64页 参考文献第64-67页 攻读学位期间发表的学术论文目录第67页
本篇论文共67页,
更多相关论文
栏 目 导 航
SHA-3论文 GCM论文 GMAC论文 Ghash论文 LUFFA论文
版权申明:目录由用户guo333提供,仅收录目录,作者需要删除这篇论文目录。
||||||||||
Copyright(C) All Rights Reserved求实战应用Java算法分析与设计(链表、二叉树、哈夫曼树、图、动态规划、HashTable... - 『悬赏问答区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 410|回复: 9
求实战应用Java算法分析与设计(链表、二叉树、哈夫曼树、图、动态规划、HashTable...
阅读权限10
求&&实战应用Java算法分析与设计(链表、二叉树、哈夫曼树、图、动态规划、HashTable算法)& &找了好多都是加密的&&求版本
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
但声明,资料来自网络,如内含广告,与本人无关,
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
https://pan.baidu.com/s/1slbdfy9#list/path=%2F&&谢谢& &在线观看的
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
https://pan.baidu.com/s/1kUuFj0b#list/path=%2F&parentPath=%2Fjava%E8%A7%86%E9%A2%91 密码jpsk
你这个还是加密的
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
https://pan.baidu.com/s/1slbdfy9#list/path=%2F&&谢谢& &在线观看的
你这个也不行啊
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
https://pan.baidu.com/s/1kUuFj0b
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限25
https://pan.baidu.com/s/1kUuFj0b
还是加密的
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
没有不加密的吗
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
没有不加密的吗
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.Hash,一般翻译做&散列&,也有直接音译为&哈希&的,就是把任意长度的(又叫做预映射, pre-image),通过散列算法,变换成固定长度的,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的的函数。
HASH函数(计算机算法领域)
* 若结构中存在和关键字K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为(Hash function),按这个事先建立的表为。
* 对不同的关键字可能得到同一散列地址,即key1&key2,而f(key1)=f(key2),这种现象称碰撞。具有相同函数值的关键字对该散列函数来说称做。综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的&象& 作为记录在表中的存储位置,这种表便称为,这一映象过程称为散列造表或,所得的存储位置称散列地址。
* 若对于集合中的任一个关键字,经映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个&随机的地址&,从而减少冲突。
所有都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果。但另一方面,散列函数的输入和输出不是一一对应的,如果两个散列值相同,两个输入值很可能是相同的,但并不能绝对肯定二者一定相等。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。
典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的一一对应。一一对应的散列函数也称为排列。可逆性可以通过使用一系列的对于输入值的可逆&混合&运算而得到。
常用HASH函数
&直接取余法:f(x):= x mod maxM ; maxM一般是不太接近 2^t 的一个质数。
&乘法取整法:f(x):=trunc((x/maxX)*maxlongit) mod maxM,主要用于实数。
&平方取中法:f(x):=(x*x div 1000 ) mod 1000000); 平方后取中间的,每位包含信息比较多。
能使对一个数据序列的访问过程更加迅速有效,通过散列函数,将被更快地定位。
(详细构造方法可以参考中的【哈希表的构造方法】)
1.法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a&key + b,其中a和b为常数(这种散列函数叫做自身函数)
2. 数字分析法
3. 平方取中法
4. 折叠法
5. 随机数法
6. 除留余数法:取关键字被某个不大于表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p,p&=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
处理冲突方法
1.;Hi=(H(key) + di) MOD m,i=1,2,&,k(k&=m-1),其中H(key)为,m为长,di为增量序列,可有下列三种取法:
1). di=1,2,3,&,m-1,称线性探测再散列;
2). di=1^2,(-1)^2,2^2,(-2)^2,(3)^2,&,&(k)^2,(k&=m/2)称二次探测再散列;
3). di=序列,称伪随机探测再散列。
2. 再:Hi=RHi(key),i=1,2,&,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生&聚集&,但增加了计算时间。
3. 链地址法(拉链法)
4. 建立一个公共溢出区
查找性能分析
的查找过程基本上和造表过程相同。一些关键码可通过转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用来衡量。
查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:
1.散列函数是否均匀;
2. 处理冲突的方法;
3.的装填因子。
散列表的装填因子定义为:&= 填入表中的元素个数/散列表的长度
&是散列表装满程度的标志因子。由于表长是定值,&与&填入表中的元素个数&成正比,所以,&越大,填入表中的元素较多,产生冲突的可能性就越大;&越小,填入表中的元素较少,产生冲突的可能性就越小。
实际上,散列表的是装填因子&的函数,只是不同处理冲突的方法有不同的函数。
了解了hash基本定义,就不能不提到一些著名的hash算法,和可以说是目前应用最广泛的,而它们都是以为基础设计的。
常用hash算法的介绍:
MD4(RFC 1320)是 MIT 的在 1990 年设计的,MD 是 Message Digest() 的缩写。它适用在32位的处理器上用高速软件实现&&它是基于 32数的位操作来实现的。
MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
(3)及其他
SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
散列函数应用
由于的应用的多样性,它们经常是专为某一应用而设计的。例如,假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个&单向&操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码有可能因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的安全性。
错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于的时候,可以用相对较短的散列值来验证任意长度的数据是否被更改过。
使用一个可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做。
对于错误校正,假设相似扰动的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。对于一个信息串的微扰可以被分为两类,大的(不可能的)错误和小的(可能的)错误。我们对于第二类错误重新定义如下,假如给定 H(x) 和 x+s,那么只要s足够小,我们就能有效的计算出x。那样的被称作错误校正编码。这些错误校正编码有两个重要的分类:循环冗余校验和所罗门码。
对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数&&例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。
那些并不紧随IT工业潮流的人往往能反其道而行之,对于那些微小差异足够的确实存在。现存的绝大多数散列算法都是不够鲁棒的,但是有少数散列算法能够达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam[1]服务。用户可以用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就能够收到被识别的音乐的曲名(需要收取一定的费用)
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
我们比较熟悉的校验算法有和CRC校验,这2种校验并没有抗的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
Hash 算法也是现代密码体系中的一个重要组成部分。由于的运算速度较慢,所以在数字签名协议中,扮演了一个重要的角色。对 Hash 值,又称""进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
(3) 鉴权协议
如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。以上就是一些关于hash以及其相关的一些基本预备知识。
(1)余数法:先估计整个哈希表中的表项目数目大小。然后用这个估计值作为除数去除每个原始值,得到商和余数。用余数作为哈希值。因为这种方法产生冲突的可能性相当大,因此任何搜索算法都应该能够判断冲突是否发生并提出取代算法。
(2)折叠法:这种方法是针对原始值为数字时使用,将原始值分为若干部分,然后将各部分叠加,得到的最后四个数字(或者取其他位数的数字都可以)来作为哈希值。
(3)基数转换法:当原始值是数字时,可以将原始值的数制基数转为一个不同的数字。例如,可以将十进制的原始值转为十六进制的哈希值。为了使哈希值的长度相同,可以省略高位数字。
(4)数据重排法:这种方法只是简单的将原始值中的数据打乱排序。比如可以将第三位到第六位的数字逆序排列,然后利用重排后的数字作为哈希值。
哈希函数并不通用,比如在数据库中用能够获得很好效果的哈希函数,用在密码学或错误校验方面就未必可行。在密码学领域有几个著名的哈希函数。这些函数包括MD2、MD4以及MD5,利用散列法将数字签名转换成的哈希值称为信息摘要(message-digest),另外还有散列算法(SHA),这是一种标准算法,能够生成更大的(60bit)的信息摘要,有点儿类似于MD4算法。[1]&
文件的hash值
大家都知道emule是基于P2P (Peer-to-peer的缩写,指的是点对点的意思的软件), 它采用了"多源文件传输协议&(,the Multisource FileTransfer Protocol)。在协议中,定义了一系列传输、压缩和打包还有积分的标准,emule 对于每个文件都有md5-hash的算法设置,这使得该文件独一无二,并且在整个网络上都可以追踪得到。
MD5-Hash-文件的数字文摘通过Hash函数计算得到。不管文件长度如何,它的Hash函数计算结果是一个固定长度的数字。与不同,这一个Hash算法是一个不可逆的。采用安全性高的Hash算法,如MD5、SHA时,两个不同的文件几乎不可能得到相同的Hash结果。因此,一旦文件被修改,就可检测出来。
当我们的文件放到emule里面进行共享发布的时候,会根据自动生成这个文件的hash值,他就是这个文件唯一的身份标志,它包含了这个文件的基本信息,然后把它提交到所连接的服务器。当有他人想对这个文件提出下载请求的时候, 这个hash值可以让他人知道他正在下载的文件是不是就是他所想要的。尤其是在文件的其他属性被更改之后(如名称等)这个值就更显得重要。而且服务器还提供了,这个文件当前所在的用户的地址,端口等信息,这样emule就知道到哪里去下载了。
一般来讲我们要搜索一个文件,emule在得到了这个信息后,会向被添加的服务器发出请求,要求得到有相同hash值的文件。而服务器则返回持有这个文件的用户信息。这样我们的客户端就可以直接的和拥有那个文件的用户沟通,看看是不是可以从他那里下载所需的文件。
对于emule中文件的hash值是固定的,也是唯一的,它就相当于这个文件的信息摘要,无论这个文件在谁的机器上,他的hash值都是不变的,无论过了多长时间,这个值始终如一,当我们在进行文件的下载上传过程中,emule都是通过这个值来确定文件。
我们经常在emule日志里面看到,emule正在hash文件,这里就是利用了hash算法的性这个功能了,文章前面已经说了一些这些功能,其实这部分是一个非常复杂的过程,在ftp,bt等软件里面都是用的这个基本原理,emule里面是采用文件分块传输,这样传输的每一块都要进行对比校验,如果错误则要进行重新下载,这期间这些相关信息写入met文件,直到整个任务完成,这个时候part文件进行重新命名,然后使用move命令,把它传送到incoming文件里面,然后met文件自动删除,所以我们有的时候会遇到hash文件失败,就是指的是met里面的信息出了错误不能够和part文件匹配,另外有的时候开机也要疯狂hash,有两种情况一种是你在第一次使用,这个时候要hash提取所有文件信息,还有一种情况就是上一次你,那么这个时候就是要进行排错校验了。
关于hash的算法研究,一直是信息科学里面的一个前沿,尤其在普及的今天,他的重要性越来越突出,其实我们每天在网上进行的信息交流安全验证,我们在使用的操作系统原理,里面都有它的身影,特别对于那些研究信息安全有兴趣的朋友,这更是一个打开信息世界的钥匙,他在hack世界里面也是一个研究的焦点。
道理同上,当我们在第一次使用emule的时候,emule会自动生成一个值,这个值也是唯一的,它是我们在emule世界里面的标志,只要你不卸载,不删除config,你的userhash值也就永远不变,积分制度就是通过这个值在起作用,emule里面的积分保存,身份识别,都是使用这个值,而和你的id和你的用户名无关,你随便怎么改这些东西,你的userhash值都是不变的,这也充分保证了公平性。其实他也是一个信息摘要,只不过保存的不是文件信息,而是我们每个人的信息。
是的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。(注意:关键字不是像在加密中所使用的那样是秘密的,但它们都是用来&解锁&或者访问数据的。)例如,在英语字典中的关键字是英文单词,和它们相关的记录包含这些单词的定义。在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的内部所创建的索引上。
散列表散列函数的几乎不可能/不切实际的理想是把每个关键字映射到唯一的索引上(参考完美散列),因为这样能够保证直接中的每一个数据。
一个好的散列函数(包括大多数)具有均匀的真正随机输出,因而平均只需要一两次探测(依赖于装填因子)就能找到目标。同样重要的是,随机几乎不可能出现非常高的冲突率。但是,少量的可以估计的冲突在实际状况下是不可避免的(参考生日悖论)。
在很多情况下,heuristic散列函数所产生的冲突比随机散列函数少的多。Heuristic函数利用了相似关键字的相似性。例如,可以设计一个heuristic函数使得像FILE0000.CHK,FILE0001.CHK,FILE0002.CHK,等等这样的文件名映射到表的连续指针上,也就是说这样的序列不会发生冲突。相比之下,对于一组好的关键字性能出色的随机散列函数,对于一组坏的关键字经常性能很差,这种坏的关键字会自然产生而不仅仅在攻击中才出现。性能不佳的表意味着查找操作会退化为费时的线性搜索。
MD5、SHA1的破解
日,在美国圣芭芭拉召开的国际密码大会上,山东大学教授在国际会议上首次宣布了她及她的研究小组的研究成果&&对、HAVAL-128、MD4和四个著名的破译结果。次年二月宣布破解密码。
Linux命令&&hash
hash命令用来显示、添加和清除。该命令的语法格式如下所示。
hash [-l] [-r] [-p &path& &name&] [-t &command&]
显示哈希表,包括路径
清除哈希表
-p &path& &name&
向哈希表中增加内容
-t &command&
显示指定命令的完整路径
hash 每次传输完中的数据后就显示一个#号
算法将任意长度的值为较短的固定长度的二进制值,这个小的二进制值称为。是一段数据唯一且极其紧凑的表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的可以检验数据的完整性。一般用于快速查找和加密算法。[1]&
哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。
通过将单向数学函数(有时称为&哈希算法&)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为&消息摘要&。
简单解释:哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。[1]&
class&GeneralHashFunctionLibrary
{/*RSHash*/
&&&&public&long&RSHash(String&str)
&&&&&&&&int&b&=&378551;
&&&&&&&&int&a&=&63689;
&&&&&&&&long&hash&=&0;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&&&&&hash&=&hash&*&a&+&str.charAt(i);
&&&&&&&&&&&&a&=&a&*&b;
&&&&&&&&&}
&&&&&&&&&return&
&&&&/*JSHash*/
&&&&public&long&JSHash(String&str)
&&&&&&&&long&hash&=&;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&&&&&hash&^=&((hash&&&&5)&+&str.charAt(i)&+&(hash&&&&2));
&&&&&&&&return&
&&&&/*PJWHash*/
&&&&public&long&PJWHash(String&str)
&&&&&&&&long&BitsInUnsignedInt&=&(long)(4&*&8);
&&&&&&&&long&ThreeQuarters&=&(long)((BitsInUnsignedInt&*&3)&/&4);
&&&&&&&&long&OneEighth&=&(long)(BitsInUnsignedInt&/&8);
&&&&&&&&long&HighBits&=&(long)(0xFFFFFFFF)&&(BitsInUnsignedInt-OneEighth);
&&&&&&&&long&hash&=&0;
&&&&&&&&long&test&=&0;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&&&&&hash&=&(hash&&&&OneEighth)&+&str.charAt(i);
&&&&&&&&&&&&if((test&=&hash&&&HighBits)&!=&0)
&&&&&&&&&&&&&&&&hash&=&((hash&^&(test&&&&ThreeQuarters))&&&(~HighBits));
&&&&&&&&return&
&&&&/*ELFHash*/
&&&&public&long&ELFHash(String&str)
&&&&&&&&long&hash&=&0;
&&&&&&&&long&x&=&0;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&&&&&hash&=&(hash&&&&4)&+&str.charAt(i);
&&&&&&&&&&&&if((&x&=&hash&&&0xF0000000L)&!=&0)
&&&&&&&&&&&&hash&^=&(&x&&&&24);
&&&&&&&&&&&&hash&&=&~x;
&&&&&&&&return&
&&&&/*BKDRHash*/
&&&&public&long&BKDRHash(String&str)
&&&&&&&&long&seed&=&131;//etc..
&&&&&&&&long&hash&=&0;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&hash&=&(hash&*&seed)&+&str.charAt(i);
&&&&&&&&return&
&&&&/*SDBMHash*/
&&&&public&long&SDBMHash(String&str)
&&&&&&&&long&hash&=&0;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&hash&=&str.charAt(i)&+&(hash&&&&6)&+&(hash&&&&16)&-&
&&&&&&&&return&
&&&&/*DJBHash*/
&&&&public&long&DJBHash(String&str)
&&&&&&&&long&hash&=&5381;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&hash&=&((hash&&&&5)&+&hash)&+&str.charAt(i);
&&&&&&&&return&
&&&&/*DEKHash*/
&&&&public&long&DEKHash(String&str)
&&&&&&&&long&hash&=&str.length();
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&&&&&hash&=&((hash&&&&5)&^&(hash&&&&27))&^&str.charAt(i);
&&&&&&&&return&
&&&&/*BPHash*/
&&&&public&long&BPHash(String&str)
&&&&&&&&long&hash=0;
&&&&&&&&for(int&i&=&0;i&&&str.length();&i++)
&&&&&&&&hash&=&hash&&&&7&^&str.charAt(i);
&&&&&&&&return&
&&&&/*FNVHash*/
&&&&public&long&FNVHash(String&str)
&&&&&&&&long&fnv_prime&=&0x811C9DC5;
&&&&&&&&long&hash&=&0;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)&
&&&&&&&&hash&*=&fnv_
&&&&&&&&hash&^=&str.charAt(i);
&&&&&&&&return&
&&&&/*APHash*/
&&&&long&APHash(String&str)
&&&&&&&&long&hash&=&0xAAAAAAAA;
&&&&&&&&for(int&i&=&0;&i&&&str.length();&i++)
&&&&&&&&&&&&if((i&&&1)&==&0)
&&&&&&&&&&&&&&&&hash&^=((hash&&&&7)&^&str.charAt(i)&^&(hash&&&&3));
&&&&&&&&&&&&else
&&&&&&&&&&&&&&&&hash&^=&(~((hash&&&&11)&^&str.charAt(i)&^&(hash&&&&5)));
&&&&&&&&return&
用来产生一些数据片段(例如消息或会话项)的哈希值的算法。使用好的哈希算法,在输入数据中所做的更改就可以更改结果哈希值中的所有位;因此,哈希对于检测数据对象(例如消息)中的修改很有用。此外,好的哈希算法使得构造两个相互独立且具有相同哈希的输入不能通过计算方法实现。典型的哈希算法包括 MD2、MD4、MD5 和 SHA-1。哈希算法也称为&哈希函数&。[1]&
另请参阅: 基于哈希的消息验证模式 (HMAC), MD2, MD4, MD5,消息摘要, 安全哈希算法 (SHA-1)
MD5一种符合工业标准的单向 128 位哈希方案,由 RSA Data Security, Inc. 开发。 各种&点对点协议(PPP)&供应商都将它用于加密的身份验证。哈希方案是一种以结果唯一并且不能返回到其原始格式的方式来转换数据(如密码)的方法。质询握手身份验证协议(CHAP) 使用质询响应并在响应时使用单向 MD5哈希法。按照此方式,您无须通过网络发送密码就可以向服务器证明您知道密码。
质询握手身份验证协议(CHAP)&点对点协议(PPP)&连接的一种质询响应验证协议,在 RFC 1994 中有所描述。 该协议使用业界标准 MD5哈希算法来哈希质询串(由身份验证服务器所发布)和响应中的用户密码的组合。
点对点协议
用点对点链接来传送多协议数据报的行业标准协议套件。RFC 1661 中有关于 PPP 的文档。
另请参阅: 压缩控制协议 (CCP),远程访问,征求意见文档 (RFC),传输控制协议/Internet 协议 (TCP/IP),自主隧道。[1]&
阅读(...) 评论()

我要回帖

更多关于 一致哈希算法 的文章

 

随机推荐