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;