搞定雜湊演算法

2021-09-28 11:15:22 字數 2109 閱讀 1311

1、基本概念

雜湊演算法歷史悠久,業界著名的雜湊演算法例如:md5、sha等。將任意長度的二進位制值串對映為固定長度的二進位制串,這個對映的規則就是雜湊演算法。通過原始資料對映之後得到的二進位制串就是雜湊值。雜湊演算法需要滿足的幾點要求:

2、應用場景

應用一:安全加密

說到雜湊演算法的應用,最先想到的應該就是安全加密。最常用於加密的雜湊演算法是md5(md5 message-digest algorithm,md5 訊息摘要演算法)和sha(secure hash algorithm,安全雜湊演算法)。除了這兩個之外,當然還有很多其他加密演算法,比如des(data encryption standard,資料加密標準)、aes(advanced encryption standard,高階加密標準)。

雜湊演算法產生的雜湊值的長度是固定且有限的。比如前面舉的 md5 的例子,雜湊值是固定的 128 位二進位制串,能表示的資料是有限的,最多能表示 2^128 個資料,而我們要雜湊的資料是無窮的。基於鴿巢原理,如果我們對 2^128+1 個資料求雜湊值,就必然會存在雜湊值相同的情況。

應用二:唯一標識

給每乙個取乙個唯一標識,或者說資訊摘要。比如,我們可以從的二進位製碼串開頭取 100 個位元組,從中間取 100 個位元組,從最後再取 100 個位元組,然後將這 300 個位元組放到一塊,通過雜湊演算法(比如 md5),得到乙個雜湊字串,用它作為的唯一標識。通過這個唯一標識來判定是否在相簿中,這樣就可以減少很多任務作量。

如果還想繼續提高效率,我們可以把每個的唯一標識,和相應的檔案在相簿中的路徑資訊,都儲存在雜湊表中。當要檢視某個是不是在相簿中的時候,我們先通過雜湊演算法對這個取唯一標識,然後在雜湊表中查詢是否存在這個唯一標識。

如果不存在,那就說明這個不在相簿中;如果存在,我們再通過雜湊表中儲存的檔案路徑,獲取到這個已經存在的,跟現在要插入的做全量的比對,看是否完全一樣。如果一樣,就說明已經存在;如果不一樣,說明兩張儘管唯一標識相同,但是並不是相同的。

應用三:資料校驗

具體的 bt 協議很複雜,校驗方法也有很多,我來說其中的一種思路。

應用四:雜湊函式

前面講了很多雜湊演算法的應用,實際上,雜湊函式也是雜湊演算法的一種應用。

3、雜湊演算法解決分布式問題

應用五:負載均衡

實際上,會話保持機制與負載均衡的基本功能是完全矛盾的。負載均衡希望將來自客戶端的連線、請求均衡的**至後端的多台伺服器,以避免單台伺服器負載過高;而會話保持機制卻要求將某些請求**至同一臺伺服器進行處理。因此,在實際的部署環境中,我們要根據應用環境的特點,選擇適當的會話保持機制。也就是說,我們需要在同乙個客戶端上,在一次會話中的所有請求都路由到同乙個伺服器上。

我們可以通過雜湊演算法,對客戶端 ip 位址或者會話 id 計算雜湊值,將取得的雜湊值與伺服器列表的大小進行取模運算,最終得到的值就是應該被路由到的伺服器編號。

應用

六、資料分片

我們來分析一下。這個問題有兩個難點,第乙個是搜尋日誌很大,沒辦法放到一台機器的記憶體中。第二個難點是,如果只用一台機器來處理這麼巨大的資料,處理時間會很長。

實際上,這裡的處理過程也是 mapreduce 的基本設計思想。

應用七:分布式儲存

一致性雜湊演算法。假設我們有 k 個機器,資料的雜湊值的範圍是 [0, max]。我們將整個範圍劃分成 m 個小區間(m 遠大於 k),每個機器負責 m/k 個小區間。當有新機器加入的時候,我們就將某幾個小區間的資料,從原來的機器中搬移到新的機器中。這樣,既不用全部重新雜湊、搬移資料,也保持了各個機器上資料數量的均衡。一致性演算法較難理解,可參考(白話解析:一致性雜湊演算法 consistent hashing

4、總結

在負載均衡應用中,利用雜湊演算法替代對映表,可以實現乙個會話粘滯的負載均衡策略。在資料分片應用中,通過雜湊演算法對處理的海量資料進行分片,多機分布式處理,可以突破單機資源的限制。在分布式儲存應用中,利用一致性雜湊演算法,可以解決快取等分布式系統的擴容、縮容導致資料大量搬移的難題。

查詢演算法 雜湊演算法,雜湊表查詢

那麼問題來了,如果集合s中同時存在值k 16和值k 27,我們該如何將兩個位址一樣的值存入雜湊表呢?常用的雜湊函式 處理衝突的方法 2.連位址法 雜湊表涉及的是一種對映關係,可以根據某個值查詢到關鍵字的位址,這樣的做法省去了比較的時間,優化了演算法。雜湊表是把值 關鍵字 存到跟它具有 唯一 對映的格...

雜湊函式 雜湊函式 演算法

常用字串雜湊函式有bkdrhash,aphash,djbhash,jshash,rshash,sdbmhash,pjwhash,elfhash等等。c 實現 include define m 249997 define m1 1000003 define m2 10000019 大素數 using ...

詳解雜湊演算法 雜湊表

何為雜湊演算法 雜湊演算法又稱為雜湊技術 hash技術 雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。雜湊值是一段資料唯一且極其緊湊的數值表示形式。如果雜湊一段明文而且哪怕只更改該段落的乙個字母,隨後的雜湊都將產生不同的值。要找到雜湊為同乙個值的兩個...