演算法之雜湊

2021-10-08 23:58:09 字數 2176 閱讀 3657

雜湊演算法歷史悠久,業界著名的雜湊演算法也有很多,比如 md5、sha 等。在開發中,基本上都是拿現成的直接用。

不管是「雜湊」還是「雜湊」,這都是中文翻譯的差別,英文其實就是「hash」。雜湊演算法的定義:任意長度的二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制值串就是雜湊值。雜湊演算法需要滿足以下要求:

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

2:對輸入資料非常敏感,哪怕原始資料只修改了乙個 bit,最後得到的雜湊值也大不相同;

3:雜湊衝突的概率要很小,對於不同的原始資料,雜湊值相同的概率非常小;

4:雜湊演算法的執行效率要盡量高效,針對較長的文字,也能快速地計算出雜湊值。

通過md5加密演算法來說明一下,分別對「雜湊演算法」和「jiajia」這兩個文字,計算 md5 雜湊值,得到兩串看起來毫無規律的字串。可以看出來,無論要雜湊的文字有多長、多短,通過 md5 雜湊之後,得到的雜湊值的長度都是相同的,而且得到的雜湊值看起來像一堆隨機數,完全沒有規律。

md5

("雜湊演算法"

)= bb4767201ad42c74e650c1b6c03d78fa

md5(

"jiajia"

)= cd611a31ea969b908932d44d126d195b

兩個非常相似的文字,「雜湊演算法!」和「雜湊演算法」。這兩個文字只有乙個感嘆號的區別。如果用 md5 雜湊演算法分別計算它們的雜湊值,你會發現,儘管只有一字之差,得到的雜湊值也是完全不同的。

md5

("雜湊演算法!")=

425f

0d5a917188d2c3c3dc85b5e4f2cb

md5(

"雜湊演算法"

)= a1fb91ac128e6aa37fe42c663971ac3d

雜湊演算法的應用非常非常多,最常見的分別是安全加密、唯一標識、資料校驗、雜湊函式等。

最常用於加密的雜湊演算法是 md5(md5 message-digest algorithm,md5 訊息摘要演算法)和 sha(secure hash algorithm,安全雜湊演算法)。

對用於加密的雜湊演算法來說,有兩點格外重要。第一點是很難根據雜湊值反向推導出原始資料,第二點是雜湊衝突的概率要很小。因為加密的目的就是防止原始資料洩露,所以很難通過雜湊值反向推導原始資料,這是乙個最基本的要求。不管是什麼雜湊演算法,只能儘量減少碰撞衝突的概率,**理論上是沒辦法做到完全不衝突的。**這是為什麼呢?

先看個例子:如果有 10 個鴿巢,有 11 只鴿子,那肯定有 1 個鴿巢中的鴿子數量多於 1 個,換句話說就是,肯定有 2 只鴿子在 1 個鴿巢內。(鴿巢原理

為什麼雜湊演算法無法做到零衝突?雜湊演算法產生的雜湊值的長度是固定且有限的。比如前面舉的 md5 的例子,雜湊值是固定的 128 位二進位制串,能表示的資料是有限的,最多能表示2^128個資料,而要雜湊的資料是無窮的。基於鴿巢原理,如果我們對2^128+1個資料求雜湊值,就必然會存在雜湊值相同的情況。所以,一般情況下,雜湊值越長的雜湊演算法,雜湊衝突的概率越低。不過,即便雜湊演算法存在雜湊衝突的情況,但是因為雜湊值的範圍很大,衝突的概率極低,所以相對來說還是很難破解的。

如果要在海量的相簿中,搜尋一張圖是否存在,不能單純地用的元資訊(比如名稱)來比對,因為有可能存在名稱相同但內容不同,或者名稱不同內容相同的情況。那該如何搜尋呢?可以給每乙個取乙個唯一標識,或者說資訊摘要。比如,我們可以從的二進位製碼串開頭取 100 個位元組,從中間取 100 個位元組,從最後再取 100 個位元組,然後將這 300 個位元組放到一塊,通過雜湊演算法(比如 md5),得到乙個雜湊字串,用它作為的唯一標識。通過這個唯一標識來判定是否在相簿中。

雜湊函式是設計乙個雜湊表的關鍵。它直接決定了雜湊衝突的概率和雜湊表的效能。不過,相對雜湊演算法的其他應用,雜湊函式對於雜湊演算法衝突的要求要低很多。即便出現個別雜湊衝突,只要不是過於嚴重,都可以通過開放定址法或者鍊錶法解決。

演算法之雜湊演算法

將任意長度的二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法。安全加密 安全加密主要利用雜湊演算法單向的特點。我們可以對要儲存的密碼進行雜湊演算法加密,這樣就算被攻擊且洩漏了資料庫資料,那麼別人也無法反向推導出密碼明文。唯一標識 唯一標識主要利用雜湊演算法的雜湊衝突非常小的特點...

雜湊演算法之雜湊位址取值方法

直接定址法 這個類似於資料庫的關鍵字,比如有乙個是people表,表中以年齡為關鍵字可以查到對應的人口數目 數字分析法 通過統計分析得出的乙個結果,比如對手機號進行儲存,130 x1234,130營運商,x是所屬地,1234直接使用者編號,所以分析得出我們可以通過手機後4位進行雜湊位址 平方取中法 ...

雜湊演算法之whirlpool演算法 C 實現

一,whirlpool演算法介紹 whirlpool演算法用於生成訊息摘要。該演算法輸入長度小於2 256位,輸出長度為512位。分組長度為512位,預留的明文長度填充為256位。該演算法使用512位的金鑰,參考了分組密碼的思路,使用輪函式加迭代,演算法結構與aes相似。二,填充說明 若分組不夠51...