定義和原理:將任意長度的二進制值串映射爲固定長度的二進制值串算法
要求:數據庫
哈希算法的應用不少,常見有:安全加密、惟一標識、數據校驗、散列函數、負載均衡、數據分片、分佈式存儲緩存
在海量的圖片信息中,搜索一張圖是否存在。任何文件在計算機中均可以表示成二進制碼串,將圖片的二進制碼串開頭、中間、結尾分別取100個字節,而後再經過哈希獲得惟一標識。(減輕工做量)安全
BT下載的時候會作數據校驗。服務器
防範字典攻擊引入一個鹽(salt),跟用戶密碼組合在一塊兒,增長密碼複雜度,而後用組合後的字符串來作哈希算法加密,將它存儲到數據庫中,進一步增長破解的難度。
除此以外,一些公司採用的方法:不管密碼長度多少,採用計算hash時間都固定或者足夠慢的算法,好比:
PBKDF2WithHmacSHA1。避免因計算時間不同而泄露字符串長度信息。負載均衡
負載均衡須要維護一個映射表,哈希算法能很方便地維護這個功能,經過客戶端IP或者會話ID計算哈希,經過和服務器列表的大小進行取模運算,最終獲得服務器編號。分佈式
統計「搜索關鍵詞」出現的次數,1T的文件日誌,記錄用戶的關鍵詞,快速統計出每一個關鍵詞的被搜索次數。
先對數據進行分片,而後採用多臺機器處理的方法,提高速度。關鍵詞計算哈希,跟n取模,最終獲得機器編號。同一個關鍵詞會被分配在同一個機器上。
這個處理過程也是MapReduce的基本設計思想函數
本來10臺服務器,增長到12臺。原有哈希可能失效,從新計算緩存產生雪崩效應。
一致性哈希算法:假設有K臺機器,將整個範圍劃分紅m個小區間(m遠大於k)加密