简介
用来产生一些数据片段(例如消息或会话项)的散列值的算法。好的散列算法具有在输入数据中的更改可以更改结果散列值中每个比特的特性;因此,散列对于检测在诸如消息等大型信息对象中的任何变化很有用。此外,好的散列算法使得构造两个独立的有相同散列的输入不能通过计算方法实现。典型的散列算法包括 MD2、MD4、MD5 和 SHA-1。散列算法也被称为
散列函数。散列算法的算法就是争取一个萝卜一个坑的原则
比如说有5个数 12,25,30,45,50,这几个数有个规律,就是十位数都不相同,
如果我设置一个散列函数f(value)=value/10;平常的时候,我们查找50,要比较
5次(其他算法可能不同),这里用散列算法只需要1次,就是解散列函数,key=50/10
=5,要找的数就在第5个位子.但是上面问题还是很多的,比如说查找55呢?就会出
错<因为55解散列函数之后,也是在第5个位子>,还有等等等问题,很显然这个是我
散列函数没设置好,当你把散列函数设置好了后,由于数据的庞大,冲突很有可能
产生,那么就需要我们来处理冲突了,所以写散列算法就是设置好的散列函数和
处理冲突的过程.这里散列算法涉及的查找就跟查找的数量无关,跟冲突率有直接
的关系
在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的“散列”或“消息摘要”(Message digest)。一个安全的哈希函数H必须具有以下属性:
l)H能够应用到大小不一的数据上。
2)H能够生成大小固定的输出。
3)对干任意给定的x,H(x)的计算相对简单。
4)对于任意给定的代码h,要发现满足H(x)=h的x在计算上是不可厅的。
5) 对于任意给定的块x,要发现满足H(y)=H(x)而y=x在计算上是不可行的。
6)要发现满足H(X)=H(y)的(X,y)对在计算上是不可行的