業界著名的雜湊演算法也有很多,比如 md5、sha 等。
側重點:在實際應用中,如何用雜湊演算法解決問題?
雜湊演算法:將任意長度的二進位制值串對映為固定長度的二進位制值串的對映規則;
雜湊值:通過原始資料對映之後得到的二進位制值串。
示例 ==》md5雜湊演算法
注:md5 的雜湊值是 128 位的 bit 長度,為了方便表示,我把它們轉化成了 16 進製編碼
md5("jiajia") = cd611a31ea969b908932d44d126d195b
md5(" 我今天講雜湊演算法!") = 425f0d5a917188d2c3c3dc85b5e4f2cb
md5(" 我今天講雜湊演算法 ") = a1fb91ac128e6aa37fe42c663971ac3d
==》無論雜湊文字長度,都可得到長度相同的雜湊值;
==》兩個相似的文字,得到的雜湊值完全不同。
最常見的幾種應用:安全加密、唯一標識、資料校驗、雜湊函式、負載均衡、資料分片、分布式儲存。
終極目標:一種快速並且很難被破解的雜湊演算法
最常用:md5(md5 message-digest algorithm,md5 訊息摘要演算法)和sha(secure hash algorithm,安全雜湊演算法)。
其他:des(data encryption standard,資料加密標準)、aes(advanced encryption standard,高階加密標準)。
對用於加密的雜湊演算法來說,有兩點格外重要:
==》md5中雜湊值是固定的 128 位二進位制串,能表示的資料是有限的,最多能表示 2^128 個資料,而非無限的資料。
==》即便雜湊演算法存在衝突,但是在有限的時間和資源下,雜湊演算法還是很難破解的。
==》沒有絕對安全的加密
在實際的開發過程中,也需要權衡破解難度和計算時間,來決定究竟使用哪種加密演算法。
目標:在海量相簿中,搜尋一張圖是否存在。
思路一:每個影象取乙個唯一標識(資訊摘要),eg:的二進位製碼串頭取100個位元組,中間取100個位元組,從最後取100個位元組。將這300個位元組串聯並通過雜湊演算法,得到乙個雜湊字串,作為的唯一標識。
思路二:提公升效率。把每個的唯一標識和相應的檔案在相簿中的路徑資訊,都儲存在雜湊表中。當要檢視某個是否在相簿時,先通過雜湊演算法對取唯一標識,然後再雜湊表中查詢是否存在該唯一標識。若不存在,則說明不在相簿中;若存在,可通過雜湊表中儲存的檔案路徑獲取,跟現在要插入的進行全量的比對,看是否完全一樣。若一樣,則說明已存在;若不同,則說明兩張雖唯一標識相同,但不是相同的。
目標:如何檢驗檔案塊的安全、正確、完整?
思路:
通過雜湊演算法,對 100 個檔案塊分別取雜湊值,並且儲存在種子檔案中。
==》雜湊函式對資料敏感雜湊函式它對雜湊演算法的要求非常特別,更加看重的是雜湊的平均性和雜湊演算法的執行效率。
會話粘滯(session sticky)的負載均衡:在同乙個客戶端上,在一次會話中的所有請求都路由到同乙個伺服器上。
分析:(1) 日誌很大,不能放入一台機器中;(2)一台機器處理1t資料,耗時長。
方法概述:先對資料分片,然後採取多台機器處理的方法,來提高處理速度。==》mapreduce 的基本思想
具體方法:每次從相簿中讀取乙個,計算唯一標識,然後與機器個數n求餘取模,得到的值就對應要分配的機器編號,然後將該的唯一標識與路徑發到對應的機器構建雜湊表。
裝置估算:雜湊表中每個資料單元包含兩個資訊:雜湊值和檔案路徑。其中,通過md5計算雜湊值(長度為128bit,即16位元組);路徑長度上限為256位元組,不妨假設其平均長度為128位元組。若採用鍊錶法來解決衝突,則還需儲存指標,指標占用8位元組。
==》估算:雜湊表中每個資料單元占用152位元組
==》裝置假設:記憶體為2g,雜湊表裝載因子為0.75,則一台機器可以大約給1000萬(2g*0.75/152)張構建雜湊表
==》對於1億張來說,大約需要十幾台機器。
實際:針對這種海量資料的處理問題,採取多機分布式處理==》突破單機記憶體、cpu等資源限制。
情況:海量資料快取,利用前面資料分析的思想,即通過雜湊演算法對資料取雜湊值,然後對機器個數取模,得到的值就是應該儲存的快取機器編號。但是,在機器擴容時,所有的資料都要重新計算雜湊值,然後重新搬移到正確的機器上。快取中資料一下子都失效了,所有的資料請求都會穿透快取,直接去請求資料庫,很可能會發生雪崩效應,壓垮資料庫
目標:新加入一台機器後,並不需要做大量的資料搬移。==》一致性雜湊演算法
方法:假設有 k 個機器,資料的雜湊值範圍為[0, max]。將整個範圍劃分為m個小區間(m遠小於k),每個機器負責 m/k 個小區間。當有新機器加入時,將某幾個小區間的資料,從原來的機器中搬移到新的機器中
==》既不用全部計算雜湊、搬移資料,也保持各個機器上資料數量的均衡。
演算法第十一記 雜湊演算法總結
今天我在看極客時間的網課時重新認識了 雜湊演算法 這個概念,之前一直與前一節的雜湊函式搞混了。其實雜湊演算法的作用非常廣泛,雜湊函式只是其中的乙個應用 首先我們來重新認識一下 雜湊演算法 到底是什麼?它的定義和原理很簡單,基本上一句話就可以概括。將任意長度的二進位制值串對映為固定長度的二進位制值串,...
演算法導論 第十一章 雜湊表
當將乙個域u中的元素對映到乙個雜湊表t中時,我們如何對映?若對映到同一位置怎麼辦?前乙個問題我們通過hash函式來解決,後乙個問題我們通過 衝突處理 解決。1 除法 h k k mod m m的選取 素數,且不要太靠近 2的冪次方 2 乘法 其中,0 eg 當m 8 2 3,w 7時 3 全域雜湊 ...
演算法導論 第十一章 雜湊表
演算法導論 第十章 雜湊表 雜湊表大概就是把給每個要儲存的資料都用雜湊函式給定乙個關鍵字,對應到乙個槽。由於不同的資訊可能對應同樣的關鍵字,也就是說對應同乙個槽,這時要解決其衝突,解決衝突可以用鏈結法,和開放定址法。對於鏈結法,其對於衝突採取鍊錶進行解決,這樣就保證了資料不會發生衝突。其查詢的平均時...