什麼是哈希Hash算法

哈希算法是用來解決數據和數據之間對應關係的一種算法。它的初衷是用來加速數據存取。

計算機領域內的大多數查找算法都與存儲數據的規模呈正相關,用於衡量查找算法效率的量我們稱爲平均查找長度,一般情況下,比較優秀的查找算法的平均查找長度也不會短於數據規模以2爲底的對數(log_{2} n)。

哈希算法中,我們把數據項中的關鍵字用一種特定的對應關係和存儲數據項的地址或地址偏移量對應起來。注意:這種對應一般不是一一對應,因爲不可能有足夠多的地址對應近乎無窮多的關鍵字。
這樣一來,當我們知道數據關鍵字的時候,在大多數情況下可以在常數時間(與數據規模無關的常數)內存取這個關鍵字。其他的時候,有可能發生多個關鍵字佔據同一地址的現象,我們稱之爲碰撞。這種情況下需要對關鍵字進行二次或更多次的處理(如果發生多次碰撞),所費時間在最差情況下也只與規模成正比。
只要這種函數的對應關係取得足夠好,碰撞就會較少的發生,從而使平均查找長度在數據規模可控的情況下大幅度縮短,從而提高查找效率。

哈希函數除此以外,也可以用來對廣義上的字符串(例如文本、視頻、圖片、程序等等等等)進行特徵驗證。常見的有CRC32(32位循環冗餘校驗),從MD2、MD3、MD4發展而來的MD5(消息摘要算法第五版),SHA1(安全哈希算法)等等。

這類哈希算法的最初用途僅僅是對這些廣義字符串進行完整性校驗,因爲在傳輸中損壞的比特位往往僅僅是極少數,這些少數的錯誤用上述提到的算法可以得出和原本正確文件截然不同的值,這也就使得文件完整性校驗的開銷得以縮小。

問題中描述的用途其實並不完全適當,但是在一定程度內可行。

因爲訪問的網絡地址有無窮多個,但是所有的哈希算法生成的特徵值都有限,在極端情況下,很有可能會出現兩個不同的網絡地址具有相同特徵值的情況。
這不僅使得在得知特徵值時,反向推測網絡地址具有了可行性(雖然開銷可能極大,需要大量時間窮舉),而且在網絡地址增長速度極快的今天,安全地址可能和危險地址發生碰撞導致誤殺或者錯誤放行的情況(現在雖然可能還沒出現過,但不能排除這種可能性)。

這種哈希算法本身雖然在理論上是不可逆的,但是它的思想保證了它也不是絕對可靠的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章