HASH函式的特點及其應用

2021-04-20 11:36:29 字數 1468 閱讀 8629

hash函式必須具備兩個基本特徵:單向性 和 碰撞約束。單向性是指其的操作方向的不可逆性,在hash函式中是指 只能從輸入推導出輸出,而不能從輸出計算出輸入;碰撞約束是指 不能找到乙個輸入使其輸出結果等於乙個已知的輸出結果 或者 不能同時找到兩個不同的輸入使其輸出結果完全一致。乙個函式只用同時嚴格的具備了這樣的特性,我們才能認可這樣的乙個hash。

目前常用的hash函式主要有兩個系列,md 和 sha系列。md系列主要包括 md2,md4,md5,不幸的是這一系列的hash函式都已經被證實是不夠安全的了,我國山東大學教授王小雲就是因為在有限的時間內成功地破解了md2和md5演算法而揚名海內外。sha系列正是因此而生,其包含sha1 和 sha2(sha224, sah256, sha384,sha512)系列。其中224,256,384,512都是指其輸出的位長度,而sha1是160位長(注意我們應該避免使用sha0,那是sha的初始版本,後來經過調整,公升級為sha0,我們在使用的時候應該使用sha1).

經過長時間的測試和軟硬體的不斷提公升,sha1已經不再被當成是能經得住考驗的選擇了。目前大多數應用場景下,推薦使用sha256以上的演算法。在概率方面有生日悖論的存在,經此推導,每種hash演算法的實際位強度只有其結果強度的一般,即如果是sha256,實際攻擊強度只有2的128次方。

對於hash函式的使用,有很多誤區,在此特列舉其使用場景以及常見的使用誤區。但是不論如何,我們都該記得hash函式的特點:固定長度的輸出,單向不可逆,碰撞約束。

正確的應用場景:

1,資料校驗

hash函式有類似資料冗餘校驗類似的功能,但是它比簡單的冗餘校驗碰撞的概率要小得多,顧而在現在密碼學中總是用hash來做關鍵資料的驗證。

2,單向性的運用

利用hash函式的這個特點,我們能夠實現口令,密碼等安全資料的安全儲存。密碼等很多關鍵資料我們需要在資料庫中儲存,但是在實際運用的過程中,只是作比較操作,顧而我們可以比較hash結果。這一點相信在銀行等系統中有所運用,否則我們真的要睡不著覺了:)

3,碰撞約束以及有限固定摘要長度

數字簽名正是運用了這些特點來提高效率的。我們知道非對稱加密演算法速度較低,通過hash處理我們可以使其僅僅作用於hash摘要上,從而提高效率。

4,可以運用hash到隨機數的生成和密碼,salt值等的衍生中

因為hash演算法能夠最大限度的保證其唯一性,故而可以運用到關鍵資料的衍生中(從乙個隨機的種子數產生,並且不暴露種子本身秘密)。

常見的誤區:

1,誤認為其是加密演算法

有很多人把hash演算法當成是加密演算法,這是不準確的,其實我們知道加密總是相對於解密而言的,沒有解密何談加密呢,hash的設計以無法解為目的的。

2,不包含salt的口令hash

注意如果我們不附加乙個隨機的salt值,hash口令是很容易被字典攻擊入侵的。

3,不注意中間人攻擊

注意hash並不能保證網路的安全,要防止攻擊者同時替換資料和hash。正確運用中要結合加密,簽名。

沒有永遠的安全hash,只有永遠的hash思想......

迴圈佇列的主要特點及其應用

相信大家對佇列都不陌生,舉個列子我就想到排隊打飯了,先到的先打飯 也就是說佇列同棧相反,是隊頭取元素,隊尾加元素的,我就不多加贅述了。要注意到佇列結構由於他的隊尾指標指向最後乙個陣列元素時,隊頭指標不一定在陣列下標為零的地方,這就意味著在陣列的前幾組資料為空時可能會浪費資源,而隊尾卻又加不了資料了,...

簡述redis特點及其應用場景

redis的全程是remote dictionary server,是集合了五種資料結構 字串 列表 雜湊 集合 有序集合,可以說五種資料結構都是圍繞於key value的形式,而value不僅僅可以是值,還能是具體的資料結構,這給予了redis強大的變化性和靈活能力。除了資料結構的強大,另外就是r...

類中的幾個預設函式及其特點

1 建構函式 特點 初始化物件所佔的空間,可以過載,不依賴物件呼叫 2 析構函式 特點 釋放物件所佔的記憶體資源,不可以過載,依賴物件呼叫 3 拷貝建構函式 拷貝建構函式是一種特殊的建構函式,函式的名稱必須和類名稱一致,它必須的乙個引數是本型別的乙個引用變數。就類物件而言,相同型別的類物件是通過拷貝...