引言
什么是MD5,什么是SHA1,如何校驗(yàn)這些Hash。還有拿單個(gè)apk文件的MD5,SHA1訊問(wèn)是不是原版的問(wèn)題,在這里,讓我們先來(lái)了解一些基本知識(shí),了解Hash。
Hash
一般翻譯做“散列”,也有直接音譯為”哈?!钡?,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-image),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來(lái)唯一地確定輸入值。
簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。
Hash主要用于信息安全領(lǐng)域中加密算法,他把一些不同長(zhǎng)度的信息轉(zhuǎn)化成雜亂的128位的編碼里,叫做Hash值.也可以說(shuō),Hash就是找到一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間的映射關(guān)系。
了解了Hash基本定義,就不能不提到一些著名的Hash算法,MD5和SHA1可以說(shuō)是目前應(yīng)用最廣泛的Hash算法,而它們都是以MD4為基礎(chǔ)設(shè)計(jì)的。
MD4
MD4(RFC1320)是MIT的RonaldL.Rivest在1990年設(shè)計(jì)的,MD是MessageDigest的縮寫(xiě)。它適用在32位字長(zhǎng)的處理器上用高速軟件實(shí)現(xiàn)--它是基于32位操作數(shù)的位操作來(lái)實(shí)現(xiàn)的。
MD5
MD5(RFC1321)是Rivest于1991年對(duì)MD4的改進(jìn)版本。它對(duì)輸入仍以512位分組,其輸出是4個(gè)32位字的級(jí)聯(lián),與MD4相同。MD5比MD4來(lái)得復(fù)雜,并且速度較之要慢一點(diǎn),但更安全,在抗分析和抗差分方面表現(xiàn)更好。
MD5是一種不可逆的加密算法,目前是最牢靠的加密算法之一,尚沒(méi)有能夠逆運(yùn)算的程序被開(kāi)發(fā)出來(lái),它對(duì)應(yīng)任何字符串都可以加密成一段唯一的固定長(zhǎng)度的代碼。
那么它有什么用呢?很簡(jiǎn)單,通過(guò)它可以判斷原始值是否正確(是否被更改過(guò))。一般用于密碼的加密。而我們所提供的MD5校驗(yàn)碼就是針對(duì)安裝程序的唯一對(duì)應(yīng)的一段代碼。你可以使用任何MD5運(yùn)算器對(duì)下載的文件進(jìn)行運(yùn)算,運(yùn)算出來(lái)的結(jié)果如果完全符合我們提供的MD5校驗(yàn)碼,那么說(shuō)明你下載的這個(gè)程序沒(méi)有被中途修改過(guò)。
這個(gè)特征碼有如下特性,首先它不可逆,例如我有一段秘密的文字如:”MySecretWords”,經(jīng)算法變換后得到MD5碼(b9944e9367d2e40dd1f0c4040d4daaf7),把這個(gè)碼告訴其他人,他們根據(jù)這個(gè)MD5碼是沒(méi)有系統(tǒng)的方法可以知道你原來(lái)的文字是什么的。
其次,這個(gè)碼具有高度的離散性,也就是說(shuō),原信息的一點(diǎn)點(diǎn)變化就會(huì)導(dǎo)致MD5的巨大變化,例如,”ABC”MD5(902fbdd2b1df0c4f70b4a5d23525e932)和”ABC”(多了一空格)MD5(12c774468f981a9487c30773d8093561)差別非常大,而且之間沒(méi)有任何關(guān)系,也就是說(shuō)產(chǎn)生的MD5碼是不可預(yù)測(cè)的。
最后由于這個(gè)碼有128位那么長(zhǎng),所以任意信息之間具有相同MD5碼的可能性非常之低,通常被認(rèn)為是不可能的。所以一般認(rèn)為MD5碼可以唯一地代表原信息的特征,通常用于密碼的加密存儲(chǔ),數(shù)字簽名,文件完整性驗(yàn)證等。
SHA1及其他
SHA1是由NISTNSA設(shè)計(jì)為同DSA一起使用的,它對(duì)長(zhǎng)度小于264的輸入,產(chǎn)生長(zhǎng)度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1設(shè)計(jì)時(shí)基于和MD4相同原理,并且模仿了該算法。SHA-1是由美國(guó)標(biāo)準(zhǔn)技術(shù)局(NIST)頒布的國(guó)家標(biāo)準(zhǔn),是一種應(yīng)用最為廣泛的Hash函數(shù)算法,也是目前最先進(jìn)的加密技術(shù),被政府部門(mén)和私營(yíng)業(yè)主用來(lái)處理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。
數(shù)學(xué)家王小云MD5密碼算法,運(yùn)算量達(dá)到2的80次方。即使采用現(xiàn)在最快的巨型計(jì)算機(jī),也要運(yùn)算100萬(wàn)年以上才能破解。但王小云和她的研究小組用普通的個(gè)人電腦,幾分鐘內(nèi)就可以找到有效結(jié)果。SHA-1密碼算法,由美國(guó)專(zhuān)門(mén)制定密碼算法的標(biāo)準(zhǔn)機(jī)構(gòu)———美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院與美國(guó)國(guó)家安全局設(shè)計(jì),早在1994年就被推薦給美國(guó)政府和金融系統(tǒng)采用,是美國(guó)政府目前應(yīng)用最廣泛的密碼算法。2005年初,王小云和她的研究小組宣布,成功破解SHA-1。
HMAC_SHA1
一直以為HMACSHA1和SHA1沒(méi)有任何區(qū)別,直到現(xiàn)在才發(fā)現(xiàn)它倆不是完全一樣的。 HMAC的百度百科解釋?zhuān)?“HMAC是密鑰相關(guān)的哈希運(yùn)算消息認(rèn)證碼(Hash-basedMessageAuthenticationCode),HMAC運(yùn)算利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出?!笨梢钥闯觯琀MAC是需要一個(gè)密鑰的。所以,HMACSHA1也是需要一個(gè)密鑰的,而SHA1不需要。
CRC
CRC的全稱(chēng)為CyclicRedundancyCheck,中文名稱(chēng)為循環(huán)冗余校驗(yàn)。它是一類(lèi)重要的線性分組碼,編碼和解碼方法簡(jiǎn)單,檢錯(cuò)和糾錯(cuò)能力強(qiáng),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯(cuò)控制。實(shí)際上,除數(shù)據(jù)通信外,CRC在其它很多領(lǐng)域也是大有用武之地的。例如我們讀軟盤(pán)上的文件,以及解壓一個(gè)ZIP文件時(shí),偶爾會(huì)碰到“BadCRC”錯(cuò)誤,由此它在數(shù)據(jù)存儲(chǔ)方面的應(yīng)用可略見(jiàn)一斑。
這些Hash算法到底有什么用呢?
Hash算法在信息安全方面的應(yīng)用主要體現(xiàn)在以下的3個(gè)方面:
- 1)文件校驗(yàn)
我們比較熟悉的校驗(yàn)算法有奇偶校驗(yàn)和CRC校驗(yàn),這2種校驗(yàn)并沒(méi)有抗數(shù)據(jù)篡改的能力,它們一定程度上能檢測(cè)并糾正數(shù)據(jù)傳輸中的信道誤碼,但卻不能防止對(duì)數(shù)據(jù)的惡意破壞。 MD5Hash算法的”數(shù)字指紋”特性,使它成為目前應(yīng)用最廣泛的一種文件完整性校驗(yàn)和(Checksum)算法,不少Unix系統(tǒng)有提供計(jì)算md5checksum的命令。
- 2)數(shù)字簽名
Hash算法也是現(xiàn)代密碼體系中的一個(gè)重要組成部分。由于非對(duì)稱(chēng)算法的運(yùn)算速度較慢,所以在數(shù)字簽名協(xié)議中,單向散列函數(shù)扮演了一個(gè)重要的角色。對(duì)Hash值,又稱(chēng)”數(shù)字摘要”進(jìn)行數(shù)字簽名,在統(tǒng)計(jì)上可以認(rèn)為與對(duì)文件本身進(jìn)行數(shù)字簽名是等效的。而且這樣的協(xié)議還有其他的優(yōu)點(diǎn)。
- 3)鑒權(quán)協(xié)議
如下的鑒權(quán)協(xié)議又被稱(chēng)作”挑戰(zhàn)--認(rèn)證模式:在傳輸信道是可被偵聽(tīng),但不可被篡改的情況下,這是一種簡(jiǎn)單而安全的方法。
當(dāng)然,hash函數(shù)并不是完全可靠,不同文件產(chǎn)生相同MD5和SHA1的幾率還是有的,只是不高。
尋求原版的證實(shí),對(duì)應(yīng)SHA-1和MD5外,CRC的認(rèn)證也是一個(gè)很重要的因素,CRC同樣是校驗(yàn)文件的完整性,還有CDIMGE的封裝版本。
微軟出品的鏡像都能通過(guò)CRC驗(yàn)證,當(dāng)然也有人使用CRC自己進(jìn)行制作可以得到通過(guò)CRC的鏡像,那么這時(shí)候你需要對(duì)應(yīng)鏡像的SHA-1等了,所以,驗(yàn)證一個(gè)鏡像的原盤(pán)可以通過(guò)對(duì)應(yīng)多個(gè)數(shù)值來(lái)完成。
擴(kuò)展閱讀:
- 如何從傳統(tǒng)軟件開(kāi)發(fā)順利過(guò)渡到互聯(lián)網(wǎng)技術(shù)開(kāi)發(fā)
- 學(xué)習(xí)新技術(shù)時(shí)你應(yīng)當(dāng)掌握的『最少必要知識(shí)』
- 從技術(shù)到管理——角色轉(zhuǎn)變
- 他山之石,可以攻玉:從別人的項(xiàng)目中汲取經(jīng)驗(yàn)
- 軟技能:代碼之外的生存指南
- 程序員,保護(hù)你的好奇心和求知欲
- 那些會(huì)阻礙程序員成長(zhǎng)的細(xì)節(jié)[7]
- 那些會(huì)阻礙程序員成長(zhǎng)的細(xì)節(jié)[6]
- 那些會(huì)阻礙程序員成長(zhǎng)的細(xì)節(jié)[5]
- 來(lái)聽(tīng)聽(tīng)一位『大齡程序員』的心聲
- IT人士如何扛起工作生活兩座大山
- 做了七年軟件開(kāi)發(fā)后反而更迷茫
- 程序員,保護(hù)你的好奇心和求知欲
1.《.md5怎么安全解壓?終于找到答案了MD4、MD5、SHA1、HMAC、HMAC_SHA1區(qū)別》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《.md5怎么安全解壓?終于找到答案了MD4、MD5、SHA1、HMAC、HMAC_SHA1區(qū)別》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/2188316.html