首頁 > 互聯網 > 正文

怎么驗證md5值_如何驗證md5值 方法如下

2022-11-30 09:05:24 來源:互聯網


(資料圖)

在上數字簽名這道密碼學的主菜前,今天先品嘗一下數字摘要這道重要的前菜,因為數字摘要是數字簽名的組成部分。數字摘要,英文叫Hash,所以它也被叫做哈希、熵等名字。它是一種算法,可以將任意長度的原數據運算變換成一個固定長度的結果數據,這個結果數據有兩個特點:一是相對于原數據,其長度比較短,比如有16字節、20字節、32字節等等;二是它可以體現原數據的特征,也就是說原數據如果發生變化,計算出來的結果數據也會變化(注意,這里其實有一個大坑,后面會談到)。

原數據修改,摘要值變化

這兩個特點,就類似于我們寫文章時經常用到的摘要(很短,但又能體現文章大體內容),這也就是數字摘要的名稱的由來,相應的,這個結果數據就叫摘要值、哈希值或熵值(熵也是取其在物理學上表示度量之意)。

前面講過,非對稱加密的一個特點就是慢。所以在使用非對稱加密算法的時候,一般不對原數據進行直接加密。后面講到的數字簽名,實質上也是非對稱加密運算,就采取了原文的摘要,而不是原文進行加密。這樣無論原數據有多大,被加密的數據只有幾十個字節,保證了整體運算速度。雖然說數字摘要總是和數字簽名在一起,但我想很多程序員都接觸過數字摘要,拿它來做單向加密。所謂單向加密,就是指加密結果沒辦法再解密回明文(對稱加密、非對稱加密都屬于雙向加密)。單向加密主要是用做驗證,最常見的一個應用場景就是用戶口令的單向加密。數據庫中存儲了用戶口令的摘要值,用戶登錄系統時,系統計算其口令明文的摘要值,然后送到后臺對比。這樣系統中傳輸、對比、儲存的都是用戶口令的摘要值,而不是口令明文,加強了口令的安全性。數字摘要的另一個常用領域就是檢查程序的完整性,一個程序運行前,可以計算一下它的摘要值,再與其自帶摘要值對比,以確定程序有沒有被篡改過。

常用的數字摘要算法(后面是其摘要值長度)有MD5(16字節)、SHA1(20字節)、SHA256(32字節),國產算法的有SM3(32字節)。

最后照例談一下安全問題。2004年有一個報道說山東大學的王小云教授破解了MD5算法,對于一向不為公眾所知的密碼領域,這條新聞算是很有轟動效應了。當時很多非專業領域的媒體也紛紛跟進,"MD5已經坍塌"、"密碼學的基礎已經動搖"這些新聞標題很是帶了一波流量。因為使用MD5做單向加密的系統不在少數,所以當時也有很多公司、程序員開始忐忑不安了。

其實,這些都是非專業的觀點。前面講過了,數字摘要指是有固定長度的,也就是說,每一種摘要算法計算出的摘要值的個數是有限的,比如SHA256算法,它的摘要值個數是2的256次方,這個數量大到已經不是天文數字了,而是在人類已知的宇宙里已經沒有可以拿來說明這個數到底有多大的實例了。但是,它畢竟還是個數字,SHA256摘要的個數還是有限的,而原數據的數量是無限的。無限的原數據對應有限的摘要值,想象一下小時候學的抽屜原則:三個蘋果放進兩個抽屜,至少有兩個蘋果在同一個抽屜里。所以,必然有多個原數據(而且還是無限多個),被放進了同一個抽屜,就是擁有相同的摘要值。這種不同原數據,擁有相同數據摘要現象,叫做碰撞。說到這,肯定有同學會問這不顛覆了最開始說的原數據如果發生變化,數字摘要指也會變化的特征嗎?是這樣的,這也就是前面說的那個大坑。不管哪種算法,數字摘要必然存在碰撞。其實Hash這個單詞來源于拉丁文,本意就有碰撞的意思,那些發明它的數學家一開始就知道數字摘要的吊詭之處。那數字摘要的意義究竟在哪呢,它的意義在于有效碰撞存在的概率為零。所謂有效碰撞,是指發生碰撞的原數據有實際作用和意義。舉個例子,比如將"向12345這個賬戶轉10000元。"這條信息修改成"向54321這個賬戶轉10000元。",兩條信息如果計算出的摘要值是相同的,但這種碰撞就是有效碰撞,因為這種修改后的原數據是有意義的,篡改者達到了目的而不被發現出來。可以看出來,由于攻擊者篡改數據總有的特定目的,不會只為了求碰撞而篡改,所以這種有效碰撞在實際應用中可以說是不存在的,摘要算法還是安全的。王小云教授實際上是發明了一種比較快速找到MD5碰撞的算法,后來她又發明了SHA-1的碰撞算法,其意義在于發現現有算法漏洞,促進摘要算法不斷完善發展。好的摘要算法,就是要碰撞率發生足夠低。因此MD5算法不存在被破解的說法,我們也仍然不可能從摘要值反推出原文。在實際應用中,我們還可以通過在數據加鹽(添加隨機數)、多個摘要算法混用的方法進一步降低碰撞概率。

另外,一些宣稱可以破解摘要算法的網站(比如),其實是保存了一個原文與對應摘要值的數據庫,所謂破解是查詢摘要值對應的明文。你輸入的摘要值要是不在庫里,它就無能為力了。

關鍵詞:

本網站由 財經產業網 版權所有 粵ICP備18023326號-29
聯系我們:85 572 98@qq.com