算法--Hash算法及其应用场所
生活随笔
收集整理的這篇文章主要介紹了
算法--Hash算法及其应用场所
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.Hash算法定義
- 2.應用
- 2.1 安全加密
- 2.2 唯一標識
- 2.3 數據校驗
- 2.4 散列函數
- 2.5 負載均衡
- 2.6 數據分片
- 2.7 分布式存儲
1.Hash算法定義
- 哈希算法:將任意長度的二進制值串映射為固定長度的二進制值串,這個映射的規則就是哈希算法,而通過原始數據映射之后得到的二進制值串就是哈希值。
- 設計一個優秀的哈希算法并不容易,需要滿足的幾點要求:
1· 從哈希值不能反向推導出原始數據(所以哈希算法也叫單向哈希算法);
2· 對輸入數據非常敏感,哪怕原始數據只修改了一個Bit,最后得到的哈希值也大不相同;
3· 散列沖突的概率要很小,對于不同的原始數據,哈希值相同的概率非常小;
4· 哈希算法的執行效率要盡量高效,針對較長的文本,也能快速地計算出哈希值。
2.應用
2.1 安全加密
- 最常用于加密的哈希算法是MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)和SHA(Secure Hash Algorithm,安全散列算法)。
- 還有很多其他加密算法,比如DES(Data Encryption Standard,數據加密標準)、AES(Advanced Encryption Standard,高級加密標準)。
- 加密的哈希算法有兩點格外重要。第一點是很難根據哈希值反向推導出原始數據,第二點是散列沖突的概率要很小。
2.2 唯一標識
- 海量圖片查找
- 給每一個圖片取一個唯一標識。比如,從圖片的二進制碼串開頭取100個字節,從中間取100個字節,從最后再取100個字節,然后將這300個字節放到一塊,通過哈希算法(比如MD5),得到一個哈希字符串,用它作為圖片的唯一標識。通過這個唯一標識來判定圖片是否在圖庫中。
2.3 數據校驗
- BT下載電影,從多個機器上分別下載,最后合并成一個。
- 對 n 個文件塊分別取哈希值,并且保存在種子文件中。只要文件塊的內容有一丁點兒的改變,最后計算出的哈希值就會完全不同。當文件塊下載完成之后,我們可以通過相同的哈希算法,對下載好的文件塊逐一求哈希值,然后跟種子文件中保存的哈希值比對。如果不同,說明這個文件塊不完整或者被篡改了,需要再重新從其他宿主機器上下載這個文件塊。
2.4 散列函數
- 散列函數對于散列算法沖突的要求要低很多。出現個別散列沖突,只要不是過于嚴重,我們都可以通過開放尋址法或者鏈表法解決。
- 是否能反向解密也并不關心。散列函數中用到的散列算法,更加關注散列后的值是否能平均分布,散列函數執行的快慢,也會影響散列表的性能,所以,散列函數用的散列算法一般都比較簡單,比較追求效率。
思考:區塊鏈
- 區塊鏈是一塊塊區塊組成的,每個區塊分為兩部分:區塊頭和區塊體。
- 區塊頭保存著自己區塊體和上一個區塊頭的哈希值。
- 因為這種鏈式關系和哈希值的唯一性,只要區塊鏈上任意一個區塊被修改過,后面所有區塊保存的哈希值就不對了。
- 區塊鏈使用的是SHA256哈希算法,計算哈希值非常耗時,如果要篡改一個區塊,就必須重新計算該區塊后面所有的區塊的哈希值,短時間內幾乎不可能做到。
分布式系統應用:
2.5 負載均衡
- 我們可以通過哈希算法,對客戶端IP地址或者會話ID計算哈希值,將取得的哈希值與服務器列表的大小進行取模運算,最終得到的值就是應該被路由到的服務器編號。我們就可以把同一個IP過來的所有請求,都路由到同一個后端服務器上。
2.6 數據分片
- 假設有1億張圖片,很顯然,在單臺機器上構建散列表是行不通的。因為單臺機器的內存有限,而1億張圖片構建散列表顯然遠遠超過了單臺機器的內存上限。
- 對數據進行分片,然后采用多機處理。我們準備n臺機器,讓每臺機器只維護某一部分圖片對應的散列表。
- 每次從圖庫中讀取一個圖片,計算唯一標識,然后與機器個數n求余取模,得到的值就對應要分配的機器編號,然后將這個圖片的唯一標識和圖片路徑發往對應的機器構建散列表。
- 要判斷一個圖片是否在圖庫中的時候,我們通過同樣的哈希算法,計算這個圖片的唯一標識,然后與機器個數n求余取模。假設得到的值是k,那就去編號k的機器構建的散列表中查找。
2.7 分布式存儲
- 海量數據緩存在n臺機器上,哪天緩存不夠了,加一臺機器,之前數據是通過和n求模得到的,現在全失效了?
- 我們需要一種方法,使得在新加入一個機器后,并不需要做大量的數據搬移。這時候,一致性哈希算法就要登場了。
- 假設我們有k個機器,數據的哈希值的范圍是[0,MAX]。我們將整個范圍劃分成m個小區間(m遠大于k),每個機器負責m/k個小區間。當有新機器加入的時候,我們就將某幾個小區間的數據,從原來的機器中搬移到新的機器中。這樣,既不用全部重新哈希、搬移數據,也保持了各個機器上數據數量的均衡。
總結
以上是生活随笔為你收集整理的算法--Hash算法及其应用场所的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1007 DNA排序解题
- 下一篇: python自动化pdf报告_[Pyth