資料結構與演算法整理總結---雜湊演算法

lxzoliver發表於2020-04-18

雜湊演算法的定義和原理⾮常簡單,基本上⼀句話就可以概括了。將任意⻓度的⼆進位制值串對映為固定⻓度的⼆進位制值串,這個對映的規則就是雜湊演算法。⽽通過原始資料對映之後得到的⼆進位制值串就是雜湊值。但是,要想設計⼀個優秀的雜湊演算法並不 容易,根據我的經驗,我總結了需要滿⾜的⼏點要求:

1.從雜湊值不能反向推匯出原始資料(所以雜湊演算法也叫單向雜湊演算法);

2.對輸⼊資料⾮常敏感,哪怕原始資料只修改了⼀個Bit,最後得到的雜湊值也⼤不相同;

3.雜湊衝突的概率要很⼩,對於不同的原始資料,雜湊值相同的概率⾮常⼩;

4.雜湊演算法的執⾏效率要儘量⾼效,針對較⻓的⽂本,也能快速地計算出雜湊值。

以MD5雜湊演算法為例:

我們分別對“今天我來講雜湊演算法”和“jiajia”這兩個⽂本,計算MD5雜湊值,得到兩串看起來毫⽆規律的字串(MD5的雜湊值是128位的Bit⻓度,為了⽅便表示,我把它們轉化成了16進位制編碼)。可以看出來,⽆論要雜湊的⽂本有多⻓、多短,通過MD5雜湊之後,得到的雜湊值的⻓度都是相同的,⽽且得到的雜湊值看起來像⼀堆隨機數,完全沒有規律。

MD5(“今天我來講雜湊演算法”) = bb4767201ad42c74e650c1b6c03d78fa

MD5(“jiajia”) = cd611a31ea969b908932d44d126d195b

我們再來看兩個⾮常相似的⽂本,“我今天講雜湊演算法!”和“我今天講雜湊演算法”。這兩個⽂本只有⼀個感嘆號的區別。如果⽤MD5雜湊演算法分別計算它們的雜湊值,你會發現,儘管只有⼀字之差,得到的雜湊值也是完全不同的。

MD5(“我今天講雜湊演算法!”) = 425f0d5a917188d2c3c3dc85b5e4f2cb

MD5(“我今天講雜湊演算法”) = a1fb91ac128e6aa37fe42c663971ac3d

通過雜湊演算法得到的雜湊值,很難反向推匯出原始資料。⽐如上⾯的例⼦中,我們就很難通過雜湊值“a1fb91ac128e6aa37fe42c663971ac3d”反推出對應的⽂本“我今天講雜湊演算法”。

雜湊演算法的應⽤

應⽤⼀:安全加密

應⽤⼆:唯⼀標識

應⽤三:資料校驗

應⽤四:雜湊函式

應⽤五:負載均衡

應⽤六:資料分⽚

應⽤七:分散式儲存

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章