常見的Hash演算法

來源:互聯網
上載者:User
簡介 雜湊方法學 雜湊函數和素數 位偏向 各種形式的雜湊 常用的雜湊函數 各版本雜湊碼下載 簡介
哈稀函數按照定義可以實現一個偽隨機數產生器(PRNG),從這個角度可以得到一個公認的結論:雜湊函數之間效能的比較可以通過比較其在偽隨機產生方面的比較來衡量。 一些常用的分析技術,例如 泊松分布可用於分析不同的雜湊函數對不同的資料的碰撞率(collision rate)。一般來說,對任意一類的資料存在一個理論上完美的雜湊函數。這個完美的雜湊函數定義是沒有發生任何碰撞,這意味著沒有出現重複的散列值。在現實中它很難找到一個完美的雜湊散列函數,而且這種完美函數的趨近變種在實際應用中的作用是相當有限的。在實踐中人們普遍認識到,一個完美雜湊函數的雜湊函數,就是在一個特定的資料集上產生的的碰撞最少雜湊的函數。 現在的問題是有各種類型的資料,有一些是高度隨機的,有一些有包含高緯度的圖形結構,這些都使得找到一個通用的雜湊函數變得十分困難,即使是某一特定類型的資料,找到一個比較好的雜湊函數也不是意見容易的事。我們所能做的就是通過試錯方法來找到滿足我們要求的雜湊函數。可以從下面兩個角度來選擇雜湊函數: 1.資料分布  一個衡量的措施是考慮一個雜湊函數是否能將一組資料的雜湊值進行很好的分布。要進行這種分析,需要知道碰撞的雜湊值的個數,如果用鏈表來處理碰撞,則可以分析鏈表的平均長度,也可以分析散列值的分組數目。 2.雜湊函數的效率 另個一個衡量的標準是雜湊函數得到雜湊值的效率。通常,包含雜湊函數的演算法的演算法複雜度都假設為O(1),這就是為什麼在雜湊表中搜尋資料的時間複雜度會被認為是"平均為O(1)的複雜度",而在另外一些常用的資料結構,比如圖(通常被實現為紅/黑樹狀結構),則被認為是O(logn)的複雜度。 一個好的雜湊函數必修在理論上非常的快、穩定並且是可確定的。通常雜湊函數不可能達到O(1)的複雜度,但是雜湊函數在字串雜湊的線性搜尋中確實是非常快的,並且通常雜湊函數的對象是較小的主鍵標識符,這樣整個過程應該是非常快的,並且在某種程度上是穩定的。 在這篇文章中介紹的雜湊函數被稱為簡單的雜湊函數。它們通常用於散列(雜湊字串)資料。它們被用來產生一種在諸如雜湊表的關聯容器使用的key。這些雜湊函數不是密碼安全的,很容易通過顛倒和組合不同資料的方式產生完全相同的雜湊值。
雜湊方法學
雜湊函數通常是由他們產生雜湊值的方法來定義的,有兩種主要的方法: 1.基於加法和乘法的散列 這種方式是通過遍曆資料中的元素然後每次對某個初始值進行加操作,其中加的值和這個資料的一個元素相關。通常這對某個元素值的計算要乘以一個素數。

 

2.基於移位的散列

和加法散列類似,基於移位的散列也要利用字串資料中的每個元素,但是和加法不同的是,後者更多的而是進行位的移位操作。通常是結合了左移和右移,移的位元的也是一個素數。每個移位過程的結果只是增加了一些積累計算,最後移位的結果作為最終結果。


 

 

雜湊函數和素數

沒有人可以證明素數和偽隨機數產生器之間的關係,但是目前來說最好的結果使用了素數。偽隨機數產生器現在是一個統計學上的東西,不是一個確定的實體,所以對其的分析只能對整個的結果有一些認識,而不能知道這些結果是怎麼產生的。如果能進行更具體的研究,也許我們能更好的理解哪些數值比較有效,為什麼素數比其他數更有效,為什麼有些素數就不行,如果能用可再現的證明來回答這些問題,那麼我們就能設計出更好的偽隨機數產生器,也可能得到更好的雜湊函數。

圍繞著雜湊函數中的素數的使用的基本的概念是,利用一個素質來改變處理的雜湊函數的狀態值,而不是使用其他類型的數。處理這個詞的意思就是對雜湊值進行一些簡單的操作,比如乘法和加法。這樣得到的一個新的雜湊值一定要在統計學上具有更高的熵,也就是說不能有為偏向。簡單的說,當你用一個素數去乘一堆隨機數的時候,得到的數在bit這個層次上是1的機率應該接近0.5。沒有具體的證明這種不便向的現象只出現在使用素數的情況下,這看上去只是一個自我宣稱的直覺上的理論,並被一些業內人士所遵循。

決定什麼是正確的,甚至更好的方法和對散列素數的使用最好的組合仍然是一個很有黑色藝術。沒有單一的方法可以宣稱自己是最終的通用散列函數。最好的一所能做的就是通過試錯演化和獲得適當的散列演算法,以滿足其需要的統計分析方法。


位偏向

位序列發生器是純粹隨機的或者說在某種程度上確定性,可以按照一定的機率產生某種狀態或相反狀態的位元,這個機率就是位偏向。在純粹隨機的情況下,產生高位或者低位的位偏嚮應該是50%。

然後在偽隨機產生器中,演算法將決定在產生器在最小輸出模組的位偏向。


 

假設一個PRNG的產生8位作為其輸出塊。出於某種原因,MSB始終是設定為高,MSB的位偏向將是100%的機率被置高。這一結論是,即使有256個本PRNG的產生可能的值,值小於128將永遠不會產生。為簡單起見,假設其他位正在產生純粹是隨機的,那麼有平等的機會,128和255之間的任何值將產生,但是在同一時間,有0%的機會,一個小於128的值會產生。

所有PRNGs,無論是雜湊函數,密碼,msequences或其他任何產生位元流的產生器都會有這樣一個位偏向。大多數PRNGs他們將嘗試收斂位偏向到一個確定值,流密碼就是一個例子,而其他產生器在不確定的位偏向下效果更好。

混合或位序列加擾是一種產生在一個共同的平等流位偏向的方法。雖然我們必須要小心,以確保他們不會混合至發散位偏向。密碼學中的一個混合使用的形式被稱為雪崩,這就是一個位塊使用用另一個塊來替換或置換混合在一起,而另一塊產生與其他快混合的輸出。

正如下圖中顯示的,雪崩過程始於一個或多個位元據塊。對資料中的某些位操作(通常是一些輸入敏感位入減少位邏輯)生產的第i層片資料。然後重複這個過程是在第i層資料,以產生一個i+1個層資料,是當前層的位元將小於或等於前層的位元。

這一反覆的過程將導致一個依靠之前資料所有位的位。應該指出的是,下圖是一個單純的概括,雪崩過程不一定是這一進程的唯一形式。

 

 

 

各種形式的雜湊

 

雜湊是一個在現實世界中將資料對應到一個標識符的工具,下面是雜湊函數的一些常用領域:

1.字串雜湊

在資料存放區領域,主要是資料的索引和對容器的結構化支援,比如雜湊表。

2.加密雜湊

用於資料/使用者核查和驗證。一個強大的加密雜湊函數很難從結果再得到未經處理資料。加密雜湊函數用於雜湊使用者的密碼,用來代替密碼本身存在某個伺服器撒很難過。加密雜湊函數也被視為無法復原的壓縮功能,能夠代表一個訊號標識的大量資料,可以非常有用的判斷當前的資料是否已經被篡改(比如MD5),也可以作為一個資料標誌使用,以證明了通過其他手段加密檔案的真實性。

3.幾何雜湊

這個雜湊表用於在電腦視覺領域,為在任意情境分類物體的探測。 最初選擇的過程涉及一個地區或感興趣的對象。從那裡使用,如Harris角檢測器(HCD的),尺度不變特徵變換(SIFT)或速成式的強大功能(衝浪),一組功能的仿射提取這被視為代表仿射不變特徵檢測演算法表示對象或地區。這一套有時被稱為宏觀功能或功能的星座。對發現的功能的性質和類型的對象或地區被列為它可能仍然是可能的匹配兩個星座的特點,即使可能有輕微的差異(如丟失或異常特徵)兩集。星座,然後說是功能分類設定。
雜湊值是計算從星座的特性。這通常是由最初定義一個地方的雜湊值是為了居住空間中完成- 在這種情況下,散列值是一個多層面的價值,定義的空間正常化。再加上計算的雜湊值另一個進程,決定了兩個雜湊值之間的距離是必要的過程-一個距離測量是必需的,而不是一個確定性平等經營者由於對星座的雜湊值計算到了可能的差距問題。也因為簡單的歐氏距離度量的本質上是無效的,其結果是自動確定特定空間的距離度量已成為學術界研究的活躍領域處理這類空間的非線性性質。
幾何散列包括各種汽車分類的重新檢測中任意情境的目的,典型的例子。檢測水平可以多種多樣,從剛檢測是否是車輛,到特定型號的車輛,在特定的某個車輛。 4.布隆過濾器
布隆過濾器允許一個非常大範圍內的值被一個小很多的記憶體鎖代表。在電腦科學,這是眾所周知的關聯查詢,並在關聯容器的核心理念。 Bloom Filter的實現通過多種不同的hash函數使用,也可通過允許一個特定值的存在有一定的誤差機率會員查詢結果的。布隆過濾器的保證提供的是,對於任何會員國的查詢就永遠不會再有假陰性,但有可能是假陽性。假陽性的機率可以通過改變控製為布隆過濾器,並通過不同的hash函數的數量所使用的表的大小。
隨後的研究工作集中在的散列函數和雜湊表以及Mitzenmacher的布隆過濾器等領域。建議對這種結構,在資料被散列熵最實用的用法有助於雜湊函數熵,這是理論成果上締結一項最佳的布隆過濾器(一個提供給定一個最低的進一步導致假陽性的可能性表的大小或反之亦然)提供假陽性的機率定義使用者可以建造最多也作為兩種截然不同的兩兩獨立的雜湊散列函數已知功能,大大提高了查詢效率的成員。
布隆過濾器通常存在於諸如拼字檢查器,字串匹配演算法,網路資料包分析工具和網路/ Internet緩衝的應用程式。
常用的雜湊函數
通用的雜湊函數庫有下面這些混合了加法和一位操作的字串雜湊演算法。下面的這些演算法在用法和功能方面各有不同,但是都可以作為學習雜湊演算法的實現的例子。(其他版本代碼實現見下載)
1.RS 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.