第二十一節-雜湊演算法(上)

weixin_33890499發表於2018-11-10

什麼是雜湊演算法

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

雜湊演算法的幾點要求

  • 單向性

從雜湊值不能推出原始資料

  • 雪崩性

對輸入資料非常敏感,哪怕原始資料只修改了一個 Bit,最後得到的雜湊值也有接近一半的位數發生變化

  • 抗弱碰撞性

雜湊衝突的概率非常小,之所以不能說是完全不衝突,鴿巢原理解釋了這一點。

  • 高效性

能快速計算出輸入資料的雜湊值

應用

一、安全加密

對於加密的雜湊演算法來說,有兩點格外重要:

  • 不可逆推性

不過不必追求絕對不可逆推,只要達到足夠的不可逆推要求即可。

  • 抗碰撞性

這個要儘可能追求,只要機率極小即可,無法做到絕對,畢竟上面說過了鴿巢原理說明了不存在絕對的兩個不同輸入不產生相同的輸出。

二、唯一標識

比如根據雜湊值查詢庫中是否已經有了相同的圖片、視訊。git 中也使用了 SHA 來標識檔案版本和追蹤檔案。

三、資料校驗

CRC 演算法其實就是一種保證資料安全雜湊資料校驗。。。實際中,我們也可以在 BT 協議中使用雜湊演算法對每塊資料進行資料校驗,只儲存正確資料塊。

四、雜湊函式

作為雜湊表的雜湊函式,它直接決定了雜湊衝突的概率和雜湊表的效能。

相對於雜湊函式的其他應用,雜湊函式的要求比較低,即使出現個別雜湊衝突,只要不太嚴重,也是可以開放定址法和連結串列法解決的。

雜湊函式更關注一組資料能否均勻分佈在各個槽中和計算雜湊值的效率。

相關文章