怎么驗(yàn)證md5值_如何驗(yàn)證md5值 方法如下
2022-11-30 09:05:24 來(lái)源:互聯(lián)網(wǎng)
(資料圖)
在上數(shù)字簽名這道密碼學(xué)的主菜前,今天先品嘗一下數(shù)字摘要這道重要的前菜,因?yàn)閿?shù)字摘要是數(shù)字簽名的組成部分。數(shù)字摘要,英文叫Hash,所以它也被叫做哈希、熵等名字。它是一種算法,可以將任意長(zhǎng)度的原數(shù)據(jù)運(yùn)算變換成一個(gè)固定長(zhǎng)度的結(jié)果數(shù)據(jù),這個(gè)結(jié)果數(shù)據(jù)有兩個(gè)特點(diǎn):一是相對(duì)于原數(shù)據(jù),其長(zhǎng)度比較短,比如有16字節(jié)、20字節(jié)、32字節(jié)等等;二是它可以體現(xiàn)原數(shù)據(jù)的特征,也就是說(shuō)原數(shù)據(jù)如果發(fā)生變化,計(jì)算出來(lái)的結(jié)果數(shù)據(jù)也會(huì)變化(注意,這里其實(shí)有一個(gè)大坑,后面會(huì)談到)。
原數(shù)據(jù)修改,摘要值變化
這兩個(gè)特點(diǎn),就類似于我們寫文章時(shí)經(jīng)常用到的摘要(很短,但又能體現(xiàn)文章大體內(nèi)容),這也就是數(shù)字摘要的名稱的由來(lái),相應(yīng)的,這個(gè)結(jié)果數(shù)據(jù)就叫摘要值、哈希值或熵值(熵也是取其在物理學(xué)上表示度量之意)。
前面講過(guò),非對(duì)稱加密的一個(gè)特點(diǎn)就是慢。所以在使用非對(duì)稱加密算法的時(shí)候,一般不對(duì)原數(shù)據(jù)進(jìn)行直接加密。后面講到的數(shù)字簽名,實(shí)質(zhì)上也是非對(duì)稱加密運(yùn)算,就采取了原文的摘要,而不是原文進(jìn)行加密。這樣無(wú)論原數(shù)據(jù)有多大,被加密的數(shù)據(jù)只有幾十個(gè)字節(jié),保證了整體運(yùn)算速度。雖然說(shuō)數(shù)字摘要總是和數(shù)字簽名在一起,但我想很多程序員都接觸過(guò)數(shù)字摘要,拿它來(lái)做單向加密。所謂單向加密,就是指加密結(jié)果沒(méi)辦法再解密回明文(對(duì)稱加密、非對(duì)稱加密都屬于雙向加密)。單向加密主要是用做驗(yàn)證,最常見的一個(gè)應(yīng)用場(chǎng)景就是用戶口令的單向加密。數(shù)據(jù)庫(kù)中存儲(chǔ)了用戶口令的摘要值,用戶登錄系統(tǒng)時(shí),系統(tǒng)計(jì)算其口令明文的摘要值,然后送到后臺(tái)對(duì)比。這樣系統(tǒng)中傳輸、對(duì)比、儲(chǔ)存的都是用戶口令的摘要值,而不是口令明文,加強(qiáng)了口令的安全性。數(shù)字摘要的另一個(gè)常用領(lǐng)域就是檢查程序的完整性,一個(gè)程序運(yùn)行前,可以計(jì)算一下它的摘要值,再與其自帶摘要值對(duì)比,以確定程序有沒(méi)有被篡改過(guò)。
常用的數(shù)字摘要算法(后面是其摘要值長(zhǎng)度)有MD5(16字節(jié))、SHA1(20字節(jié))、SHA256(32字節(jié)),國(guó)產(chǎn)算法的有SM3(32字節(jié))。
最后照例談一下安全問(wèn)題。2004年有一個(gè)報(bào)道說(shuō)山東大學(xué)的王小云教授破解了MD5算法,對(duì)于一向不為公眾所知的密碼領(lǐng)域,這條新聞算是很有轟動(dòng)效應(yīng)了。當(dāng)時(shí)很多非專業(yè)領(lǐng)域的媒體也紛紛跟進(jìn),"MD5已經(jīng)坍塌"、"密碼學(xué)的基礎(chǔ)已經(jīng)動(dòng)搖"這些新聞標(biāo)題很是帶了一波流量。因?yàn)槭褂肕D5做單向加密的系統(tǒng)不在少數(shù),所以當(dāng)時(shí)也有很多公司、程序員開始忐忑不安了。
其實(shí),這些都是非專業(yè)的觀點(diǎn)。前面講過(guò)了,數(shù)字摘要指是有固定長(zhǎng)度的,也就是說(shuō),每一種摘要算法計(jì)算出的摘要值的個(gè)數(shù)是有限的,比如SHA256算法,它的摘要值個(gè)數(shù)是2的256次方,這個(gè)數(shù)量大到已經(jīng)不是天文數(shù)字了,而是在人類已知的宇宙里已經(jīng)沒(méi)有可以拿來(lái)說(shuō)明這個(gè)數(shù)到底有多大的實(shí)例了。但是,它畢竟還是個(gè)數(shù)字,SHA256摘要的個(gè)數(shù)還是有限的,而原數(shù)據(jù)的數(shù)量是無(wú)限的。無(wú)限的原數(shù)據(jù)對(duì)應(yīng)有限的摘要值,想象一下小時(shí)候?qū)W的抽屜原則:三個(gè)蘋果放進(jìn)兩個(gè)抽屜,至少有兩個(gè)蘋果在同一個(gè)抽屜里。所以,必然有多個(gè)原數(shù)據(jù)(而且還是無(wú)限多個(gè)),被放進(jìn)了同一個(gè)抽屜,就是擁有相同的摘要值。這種不同原數(shù)據(jù),擁有相同數(shù)據(jù)摘要現(xiàn)象,叫做碰撞。說(shuō)到這,肯定有同學(xué)會(huì)問(wèn)這不顛覆了最開始說(shuō)的原數(shù)據(jù)如果發(fā)生變化,數(shù)字摘要指也會(huì)變化的特征嗎?是這樣的,這也就是前面說(shuō)的那個(gè)大坑。不管哪種算法,數(shù)字摘要必然存在碰撞。其實(shí)Hash這個(gè)單詞來(lái)源于拉丁文,本意就有碰撞的意思,那些發(fā)明它的數(shù)學(xué)家一開始就知道數(shù)字摘要的吊詭之處。那數(shù)字摘要的意義究竟在哪呢,它的意義在于有效碰撞存在的概率為零。所謂有效碰撞,是指發(fā)生碰撞的原數(shù)據(jù)有實(shí)際作用和意義。舉個(gè)例子,比如將"向12345這個(gè)賬戶轉(zhuǎn)10000元。"這條信息修改成"向54321這個(gè)賬戶轉(zhuǎn)10000元。",兩條信息如果計(jì)算出的摘要值是相同的,但這種碰撞就是有效碰撞,因?yàn)檫@種修改后的原數(shù)據(jù)是有意義的,篡改者達(dá)到了目的而不被發(fā)現(xiàn)出來(lái)。可以看出來(lái),由于攻擊者篡改數(shù)據(jù)總有的特定目的,不會(huì)只為了求碰撞而篡改,所以這種有效碰撞在實(shí)際應(yīng)用中可以說(shuō)是不存在的,摘要算法還是安全的。王小云教授實(shí)際上是發(fā)明了一種比較快速找到MD5碰撞的算法,后來(lái)她又發(fā)明了SHA-1的碰撞算法,其意義在于發(fā)現(xiàn)現(xiàn)有算法漏洞,促進(jìn)摘要算法不斷完善發(fā)展。好的摘要算法,就是要碰撞率發(fā)生足夠低。因此MD5算法不存在被破解的說(shuō)法,我們也仍然不可能從摘要值反推出原文。在實(shí)際應(yīng)用中,我們還可以通過(guò)在數(shù)據(jù)加鹽(添加隨機(jī)數(shù))、多個(gè)摘要算法混用的方法進(jìn)一步降低碰撞概率。
另外,一些宣稱可以破解摘要算法的網(wǎng)站(比如),其實(shí)是保存了一個(gè)原文與對(duì)應(yīng)摘要值的數(shù)據(jù)庫(kù),所謂破解是查詢摘要值對(duì)應(yīng)的明文。你輸入的摘要值要是不在庫(kù)里,它就無(wú)能為力了。
關(guān)鍵詞:
相關(guān)閱讀
- 怎么驗(yàn)證md5值_如何驗(yàn)證md5值 方法如下
- 6本清穿類型的小說(shuō)推薦_清穿文推薦 一...
- 美劇必看的10部電視劇_好看的歐美電視劇...
- 中國(guó)電信寬帶套餐價(jià)格表2021_如何收費(fèi)的...
- 六一兒童節(jié)簡(jiǎn)筆畫簡(jiǎn)單又漂亮_六一兒童節(jié)...
- NBA名人堂之 風(fēng)之子 納什!_納什個(gè)人資料
- 勞動(dòng)最光榮摘抄內(nèi)容 趕緊碼住-全球快訊
- 昨夜星辰昨夜風(fēng)_孔雀東飛何處棲 文章賞...
- 全網(wǎng)最低刷qq永久會(huì)員卡盟_QQ刷鉆是真的嗎?
- 世界兒童服裝品牌十大排名_兒童服飾品牌...
- 揭秘百年前通古斯大爆炸,究竟是什么原...
- 語(yǔ)文版《論語(yǔ)十則》原文與譯文 你都學(xué)...

