1、确定性:哈希函数的算法是确定性算法,算法执行过程不引入任何随机量。这意味着相同消息的哈希结果一定相同。
2、高效性:给定任意一个消息m,可以快速计算Hash(m)
3、目标抗碰撞性:给定任意一个消息m0,很难找到另一个消息m1,使得 Hash(m0) = Hash(m1)
4、广义抗碰撞性:很难找到两个消息m0不等于m1的情况下, 使得Hash(m0) = Hash(m1)
二、优点
先分类,再查找,通过计算,缩小范围,加快查找速度
三、作用
1、数字签名:给数据打指纹
2、密码存储
四、特性
1、正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
2、逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
3、输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
4、冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。
五、hash算法
1、直接定值法:取Key或者Key的某个线性函数值为散列地址。
2、数字分析法:需要知道Key的集合,并且Key的位数比地址位数多,选择Key数字分布均匀的位。
Hash(Key) 取六位:
列数 : 1 (2) 3 (4) 5 (6) (7) 8 (9) 10 11 12 (13)
key1: 5 2 4 2 7 5 8 5 3 6 5 1 3
key2: 5 4 4 8 7 7 7 5 4 8 9 5 1
key3: 3 1 5 3 7 8 5 4 6 3 5 5 2
key4: 5 3 6 4 3 2 5 4 5 3 2 6 4
其中(2、4、6、7、9、13) 这6列数字无重复,分布较均匀,取此六列作为Hash(Key)的值。
Hash(Key1) :225833
Hash(Key2):487741
Hash(Key3):138562
Hash(Key4):342554
3、平方取中法:取Key平方值的中间几位作为Hash地址。
4、折叠法:将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后 取这几部分的叠加和(舍去进位)作为哈希地址。 当Key的位数较多的时候数字分布均匀适合采用这种方案.
5、随机数法:伪随机探测再散列。
具体实现:建立一个伪随机数发生器,Hash(Key) = random(Key). 以此伪随机数作为哈希地址。
6、除留余数法:取关键字被某个除数 p 求余,得到的作为散列地址。即 H(Key) = Key % p;