極客時間課程《數據結構與算法之美》筆記07 - 哈希算法

哈希算法-如何防止數據庫中的用戶信息被脫庫

定義和原理:將任意長度的二進制值串映射爲固定長度的二進制值串算法

要求:數據庫

  • 不能反向推導(單向哈希算法)
  • 對輸入數據敏感,哪怕只修改了一個Bit,最後獲得的哈希值也大不相同。
  • 散列衝突機率要很小。
  • 執行效率要高,針對較長的文本,也能很快地計算出哈希值。

哈希算法的應用不少,常見有:安全加密、惟一標識、數據校驗、散列函數、負載均衡、數據分片、分佈式存儲緩存

惟一標識

在海量的圖片信息中,搜索一張圖是否存在。任何文件在計算機中均可以表示成二進制碼串,將圖片的二進制碼串開頭、中間、結尾分別取100個字節,而後再經過哈希獲得惟一標識。(減輕工做量)安全

數據校驗

BT下載的時候會作數據校驗。服務器

散列函數

防範字典攻擊引入一個鹽(salt),跟用戶密碼組合在一塊兒,增長密碼複雜度,而後用組合後的字符串來作哈希算法加密,將它存儲到數據庫中,進一步增長破解的難度。
除此以外,一些公司採用的方法:不管密碼長度多少,採用計算hash時間都固定或者足夠慢的算法,好比:
PBKDF2WithHmacSHA1。避免因計算時間不同而泄露字符串長度信息。負載均衡

負載均衡

負載均衡須要維護一個映射表,哈希算法能很方便地維護這個功能,經過客戶端IP或者會話ID計算哈希,經過和服務器列表的大小進行取模運算,最終獲得服務器編號。分佈式

數據分片

統計「搜索關鍵詞」出現的次數,1T的文件日誌,記錄用戶的關鍵詞,快速統計出每一個關鍵詞的被搜索次數。
先對數據進行分片,而後採用多臺機器處理的方法,提高速度。關鍵詞計算哈希,跟n取模,最終獲得機器編號。同一個關鍵詞會被分配在同一個機器上。
這個處理過程也是MapReduce的基本設計思想函數

分佈式存儲

本來10臺服務器,增長到12臺。原有哈希可能失效,從新計算緩存產生雪崩效應。
一致性哈希算法:假設有K臺機器,將整個範圍劃分紅m個小區間(m遠大於k)加密

相關文章
相關標籤/搜索