到底什麼是hash

1.什麼是hash算法 Hash(散列、雜湊)算法,是把任意長度的輸入經過特定的算法變換成固定長度的輸出,輸出的值就是hash值。這個特定的算法就叫hash算法,hash算法並非一個固定不變的算法。只要是能達到這個目的的算法均可以說hash算法。例如MD5,SHA,String.hashcode()都是hash算法。另外不一樣的輸入可能會得出相同的hash值,那麼這種現象稱爲hash碰撞,不管是採用那種hash算法,hash碰撞都是不可避免的,咱們只能經過改進hash算法,把出現碰撞的機率下降。PS:hash這個詞在由於英語中的意思是剁碎的食物,反應在計算機領域的意思大概就是把任意的數據切割打碎,輸出固定長度的數據,因此經過hash這個單詞也能大概理解hash算法的意思。 2.hash算法的應用 2.1 哈希表 因爲用途的不一樣,hash在數據結構中的含義和密碼學中的含義並不相同。因此在這兩種不一樣的領域裏,算法的設計側重點也不一樣。在數據結構中,咱們利用hash值來創建以key-value形式的數據結構——哈希表(散列表),使用哈希表咱們能夠實現對特定value的快速查找,時間複雜度爲O(1);若是是普通的數組或者鏈表的數據結構,只能經過遍歷的方式對特定value值的查找,時間複雜度爲O(n);若是數組是有序的,那麼能夠經過二分查找,或者即便使用平衡二叉樹的數據結構,時間複雜度爲O(logN),都不如哈希表高效。但若是hash值出現頻繁的碰撞,哈希表的查找效率就會下降,最壞的狀況就會變成數組或者鏈表,複雜度降爲O(n),所以數據結構中的hash算法應該要能均勻的輸出hash值,使key能均勻的分佈在不一樣的桶中。 算法

2.2 密碼學 hash算法也能夠理解爲一種壓縮映射,把任意長度的信息壓縮成固定長度,在密碼學上把通過hash算法計算壓縮後的數據稱爲信息摘要。 咱們能夠經過對比信息摘要來檢驗數據的完整性,防止數據在傳輸過程當中被篡改。例如在http協議中傳遞參數a=1&b=2&hash=xxx,咱們經過計算參數a=1&b=2+privateKey(一個雙方都知道的密鑰)的hash值,並將這個hash值也一併傳遞,那麼接收方經過從新計算參數的hash值並與傳遞過來的hash進行對比,若是不一致那麼就說明參數在傳遞過程當中被人篡改了。因此密碼學中的hash算法要有很強的抗篡改能力,對於一個數據塊,哪怕只改動其一個比特位,其hash值的改動也會很是大。 數組

相關文章
相關標籤/搜索