【蝦說區塊鏈】什麼是hash算法?什麼是好的hash算法?

image

歡迎收聽「蝦說區塊鏈」。如今區塊鏈這個概念在互聯網上至關火熱,這裏簡單作一個普及,不涉及項目推廣投資,單純地對區塊鏈相關基礎知識概念做一個說明講解。本人區塊鏈技術愛好者,結合相關區塊鏈資料總結整理了「蝦說區塊鏈」,也是本身一個學習筆記,涉及相關內容如理解有誤,也請及時指正。算法

1

hash算法

hash算法也稱爲散列函數算法,在區塊鏈中應用的至關頻繁,在說明hash算法以前先明確一個概念。數組

計算機在底層機器碼是採用二進制的模式,所謂二進制簡單來講就是底層以0/1來標識,全部數據傳輸記錄都以010101的模式來存儲記錄,兩種狀態也可認爲就是一個平常生活中的開關,1標識開,0標識關。那麼計算機中最小的數據單位也就是這裏說的0或者1,這裏咱們稱爲bit(比特或者位),8個bit組成一個字節。固然計算機中也有八進制、十六進制的表示,這裏暫時不展開討論。只明確底層一個二進制的概念。數據結構

2

hash算法應用

Hash算法普遍應用於計算機信息科學領域中,也是十分基礎的密碼學相關知識。函數

Hash表,也稱散列表,學過計算機數據結構的都比較清楚這個概念。Hash表是根據關鍵碼值(key、value)而進行直接訪問的數據結構,把關鍵碼值映射到表中中一個位置來訪問記錄,加快查找速度,這個映射的函數稱爲hash函數,存放記錄的數組叫散列表。學習

先來看一個轉換:touhezijindeyu通過各類hash加密後獲得的值:區塊鏈

image

MD5加密:加密

5f1a4fc86d69f850bdd9d972a9b51011資源

SHA256加密:get

b71718959b8a7673e8593bd6a21dc81eb5279e89fd4edc32d648ece57ed7056d直播

SHA512加密:

0264b0a70c46e7a05ba6fff156ff51738e0d39038fa662575e0a6603412c8c7119dba6aa76d294338a0156ee22cd10d379f5848b1a45a6027fdc5c47b0366198

Hash算法能把任意長度的二進制值映射爲固定長度的二進制值,通常來講前一個二進制值咱們成爲明文,後面經過映射後獲得的固定二進制值成爲密文或者成爲hash值。一旦在明文作任何修改,密文hash值就會有較大出入。

良好的hash算法須要知足:

1)快速定向:輸入明文後,hash函數能在有限的時間和資源下計算出hash值。

2)難以逆推:獲得密文hash值後,在規定的時間內沒法推導出明文(注意是規定時間內,這個理論上和實際仍是有一些區別)。

3)明文修改異常:明文稍做修改,密文hash值會有較大出入。

4)避免衝突:不一樣明文,難以出現相同密文hash值。

Hash函數一個映像的關係組,那麼理論上會出現,明文x不等於y,那麼f(x)=f(y)的狀況。避免出現不一樣明文出現相同hash值,這種稱爲抗碰撞性,也就是上文說到的解決衝突。

散列函數的值須要儘量的平均,同時須要良好的處理衝突的方法,通常解決衝突的方法以下:

1)線性探查法:發生衝突後,線性向前去探索,找到一個附近的空位置。這種方法會致使出現堆積現象,那麼在存取的時候,沒法明確同義詞,那麼盲目探查序列,這種探查法比較線性,原理較爲明瞭,可是整個執行效率就會受到較大影響。

2)雙散列函數法:在位置衝突後,再次使用一次散列函數進行計算,使得探查序列跳躍式分佈。

經常使用的構造散列函數的方法:

1)直接尋址法:直接取key或者key的某個線性函數值爲散列地址,那麼H(key)=key或者H(key)=a*key+b,a、b爲參數。

2)數字分析法:分析一組數據,發現有衝突可能,那麼假設衝突後的數字來構成散列地址,這種方式事先找出數字的規律,而後儘量利用數據來構造衝突概率低的散列地址。

3)平方取中法:取keyword平方後的中間幾位做爲散列地址。

4)摺疊法:keyword切割,分紅位數相同的幾組,固然最後一組可不一樣,而後這幾組的疊加和做爲散列地址。

5)隨機數法:選擇一組隨機函數,取keyword得隨機值做爲散列地址。

6)除留餘數法:取keyword,而後被某個不大於散列列表表長m的數除後獲得餘數爲散列地址。公式:H(key) = key MOD p, p<=m。不只可以對keyword直接取模,也可在摺疊、平方取中等運算以後取模。

Hash函數分類:

1)加法hash:把輸入的元素一個個加起來的到最終結果。

2)位運算hash:經過利用各類位運算,移位或者異或來混合輸入元素。

3)乘法hash:利用乘法的不相關性。好比乘以一個固定或者不停變化的數。

4)除法hash:和乘法的不相關性相似,可是除法效率較慢,因此應用較少。

5)查表hash:CRC系列相關算法。

6)混合hash:經過混合上述5種方式。

Hash算法應用:

1)校驗文件:上述CRC校驗和奇偶校驗算法,防止數據篡改,MD5算法,目前聽到的較多的一種校驗文件完整性算法。

2)數字簽名:因爲非對稱算法的運算速度,在經常使用數字簽名協議中,單向的散列函數都是比較經常使用的,對於hash值,又會稱爲「數字摘要」進行數字簽名。

3)挑戰-認證模式:通常用於信道傳輸過程當中,防止偵聽破壞的一種方式。

Hash函數使用限制:

Hash函數中,不論輸入的文件長度多少,輸出結果都是一組固定長度的數字字符,結合加密方法的概念,hash算法是一個不可逆向的單項函數。文件有任意改動,便可檢測出來。同時hash算法是一個無限大範圍映射到一個有限小範圍的模式,那麼節省空間同時便於查找。

固然不是全部都適合hash算法,總結如下幾個限制:

1)hash函數是大範圍映射到小範圍,故實際輸入考慮和小範圍至關或者更小,理論上儘可能避免衝突。

2)hash函數是單向不可逆。

(音頻內容來源:「投河自盡的魚」)

如下是咱們的社區介紹,歡迎各類合做、交流、學習:)

image

點擊「閱讀原文」進入直播室聽專欄音頻

閱讀原文

相關文章
相關標籤/搜索