1. 程式人生 > >資料結構學習筆記七(雜湊演算法)

資料結構學習筆記七(雜湊演算法)

一、什麼是雜湊演算法

       將任意長度的任意二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制值串就是雜湊值。
雜湊演算法需要滿足的要求:

  • 從雜湊值不能反向推匯出原始資料(所有雜湊演算法也叫做單向雜湊演算法)
  • 對輸入資料非常敏感,哪怕只是修改了一個bit,最後得到的雜湊值也大不相同
  • 雜湊衝突的概率要很小,對於不同的原始資料,雜湊值相同的概率非常小
  • 雜湊演算法的執行效率要儘可能高,針對較長的文字,也能快速地計算出雜湊值。

二、雜湊演算法的應用

       雜湊演算法的應用非常廣泛,主要有安全加密、唯一標識、資料校驗、雜湊函式、負載均衡、資料分片、分散式儲存等。
1.安全加密
       最常用於加密的雜湊演算法是MD5(MD5訊息摘要演算法)和SHA(Secure Hash Algorithm),除了這兩個之外,還有其他演算法,比如DES(Data Encryption Standard),AES(Advanced Encryption Standard)等。
2.唯一標識


       如果要在海量的相簿中,搜尋一張圖是否存在, 不能單純地用圖片名稱來比對,因為有可能存在名稱相同但圖片內容不同的情況。為解決這種問題,可以用雜湊演算法。我們可以給每一個圖片取一個唯一標識,比如,我們可以從圖片二進位制碼串開頭取100個位元組,從中間取100個位元組,從最後再取100個位元組,然後將這300個位元組放到一塊,通過雜湊演算法(比如MD5),得到一個雜湊字串,用它作為圖片的唯一標識。通過這個唯一標識來判定圖片是否在相簿中,這樣就可以減少很多工作量。
3.資料校驗
       例如根據P2P協議下載檔案時,檔案通常是被分塊的,從多臺機器上並行下載。網路傳輸是不安全的,所以下載的檔案可能不是完整的。為了校驗檔案塊的安全、正確、完整,可以採用雜湊演算法。通過雜湊演算法,對檔案塊分別取雜湊值,並且儲存在種子檔案中。當檔案塊下載完成後,對其求雜湊值,將求出的雜湊值與種子檔案的雜湊值進行對比,如果不同,則說明檔案塊不完整。
4.雜湊函式

       雜湊函式也是雜湊演算法的一種應用。雜湊函式是設計一個散列表的關鍵,它直接決定了雜湊衝突的概率和散列表的效能。不過相對於雜湊演算法的其他應用,雜湊函式對雜湊演算法衝突的要求低得多。雜湊函式對於雜湊演算法得到的值是否能反解也並不關心,雜湊函式中用到的雜湊演算法更加關注雜湊後的值能否平均分佈。
5.負載均衡
6.資料分片
7.分散式儲存

三、如何防止資料庫中的使用者資訊被脫庫?

       如果使用者資訊被“脫庫”,黑客雖然拿到的是加密之後的密文,但可以根據“猜”的方式來破解密碼。維護一個常用密碼的字典表(比如000000,123456),把字典中的每個密碼用雜湊演算法計算雜湊值,然後拿雜湊值跟脫庫後的密文比對。如果相同,基本上就可以認為,這個加密之後的密碼對應的就是字典中的那個密碼。
       針對字典攻擊,我們可以引入一個鹽(salt),更使用者的密碼組合在一起,增加密碼的複雜度。我們拿組合之後的字串做雜湊演算法加密,將它儲存到資料庫中,進一步增加破解的難度。