我們下面引用一段文本來解釋什麼是雜湊演算法:
雜湊是一種加密演算法
雜湊函式(hash function),也稱為雜湊函式或雜湊函式。雜湊函式是乙個公開函式,可以將任意長度的訊息m對映成為乙個長度較短且長度固定的值h(m),稱h(m)為雜湊值、雜湊值(hash value)、雜湊值或者訊息摘要(message digest)。它是一種單向密碼體制,即乙個從明文到密文的不可逆對映,只有加密過程,沒有解密過程。
它的函式表示式為:h=h(m)
無論輸入是什麼數字格式、檔案有多大,輸出都是固定長度的位元串。以位元幣使用的sh256演算法為例,無論輸入是什麼資料檔案,輸出就是256bit。
該段文字出處:
sh256演算法是一種雜湊演算法,我們不太了解,那麼我們是否可以自己寫一套演算法,答案是可以的,只要符合雜湊演算法的特點:
1、雜湊值固定,任何乙個任意長度的訊息通過雜湊演算法計算後都會都會產生乙個固定的雜湊值,該雜湊值和輸出的訊息一一對應,輸出訊息出現任何改動都會導致雜湊值變動。
2、計算過程不可逆,只能從輸入訊息到雜湊值,而不能從雜湊值逆推計算出輸入訊息。
只要滿足這兩個特點,這套演算法就是雜湊演算法,當然,優秀的雜湊演算法必須滿足一下條件:
1、快速計算,必須能夠根據輸入的訊息快速計算出雜湊值,無論該訊息長度多少。
2、雜湊值長度短且固定,一把鑰匙必須足夠輕便。
3、抗碰撞性,這個很好理解,舉個例子,我有一把鎖,交給鎖匠,鎖匠根據我的鎖形狀配備了一把唯一的鑰匙,這把鎖只能通過這把鑰匙開啟。有一天,乙個小偷,拿了一把形狀相似的鎖交給鎖匠,這個鎖匠不夠精明,同樣配備了一把和我的一樣的鑰匙,然後這個小偷拿著鑰匙開了我家的門……以上的過程就是一種碰撞。雜湊演算法必須足夠「精明」,能夠分辨出不同是鎖的最細微之處。
那麼,雜湊演算法的應用場景有哪些呢?
1、雜湊演算法在密碼學中的應用。
由於雜湊演算法的不可逆性和抗碰撞性,雜湊演算法成為密碼學中最常用的加密方式。目前常用的加密演算法如:md4、md5、sha-1、sha-2等都是典型的加密雜湊演算法。
當我們需要使用使用者名稱密碼進行登入認證時,伺服器端不需要儲存密碼這種明文,只需要儲存加密演算法計算過的密文,伺服器在認證時只需要將明文經過加密後和儲存好的密文進行對照。這樣的話密碼洩露的風險只能存在於使用者,不會出現所謂的破解和攔截等洩密情況。
2、雜湊演算法進行檔案校驗
3、雜湊演算法在數字簽名中的應用
因為雜湊演算法的唯一性,雜湊演算法在數字簽名中的應用也很廣泛。
4、雜湊演算法在資料儲存和檢索方面的應用
我們試想一下,當我們想要在新華字典上查詢乙個字,比如「張」,我們會怎麼做?
最笨的方式就是一頁一頁的去翻開對比,直到找到記載有「張」字的那頁為止。如果人為去找的話,估計需要幾個小時甚至更長的時間,這個過程抽象到編碼上就是通過遍歷乙個乙個去比對,效率可想而知。
為了能快速查詢,字典設計人員為字典設計了目錄,我們可以通過偏旁或者拼音,先找到「張」字在哪一頁,然後就可以直接翻到這一頁。是不是效率提公升很多。
從演算法的角度來說,我們通過偏旁或者拼音查詢的過程就是雜湊演算法,而和「張」對應的頁數比如845就是雜湊值。
簡化過程如下:
x=f(m)=f(「張」)=845
如果輸入「章」,x= f(「章」)=845,說明這種演算法發生了碰撞。好在字典不需要超強的抗碰撞性,否則的話就需要為每乙個字單獨開一頁,那得多少頁。
雜湊演算法的應用
將任意長度的二進位制值串對映成固定長度的二進位制值串,這個對映規則就是雜湊演算法。通過原始資料對映之後得到的二進位制值串就是雜湊值。乙個優秀的雜湊演算法需滿足以下幾點 從雜湊值不能反向推導出原始資料 所以雜湊演算法也叫單向雜湊演算法 對輸入資料非常敏感,即使原始資料只修改了乙個bit,最後得到的雜湊...
雜湊演算法的應用
我們前面幾節講到 雜湊表 雜湊函式 這裡又講到 雜湊演算法 你是不是有點一頭霧水?實際上,不管是 雜湊 還是 雜湊 這都是中文翻譯的差別,英文其實就是 hash 所以,我們常聽到有人把 雜湊表 叫作 雜湊表 hash 表 把 雜湊演算法 叫作 hash 演算法 或者 雜湊演算法 那到底什麼是雜湊演算...
雜湊演算法的應用
不管是 雜湊 還是 雜湊 這都是中文翻譯的差別,英文其實就是 hash 1.1 定義 將任意長度的二進位制值串對映成固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制值串就是雜湊值。1.2 如何設計乙個優秀的雜湊演算法?單向雜湊 從雜湊值不能反向推導出雜湊值 ...