常用的數(shù)字摘要算法有MD5,SHA等,下面這對(duì)這些數(shù)字摘要算法來進(jìn)行介紹。
將數(shù)據(jù)(如一段文字)運(yùn)算變?yōu)榱硪还潭ㄩL度值,是散列算法的基礎(chǔ)原理。
MD5算法
消息摘要算法版本5(Message-Digest Algorithm 5)即MD5,由Ron Rivest(RSA公司)在1992年提出,目前被廣泛應(yīng)用于數(shù)據(jù)完整性校驗(yàn)、數(shù)據(jù)(消息)摘要、數(shù)據(jù)加密等。MD2、MD4、MD5都產(chǎn)生16字節(jié)(128位)的校驗(yàn)值,一般用32位十六進(jìn)制數(shù)表示。MD2的算法較慢但相對(duì)安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。
介紹
MD5 報(bào)文摘要算法:MD5 報(bào)文摘要算法將任意長度的信息作為輸入值,并將其換算成一個(gè) 128 位長度的"指紋信息"或"報(bào)文摘要"值來代表這個(gè)輸入值,并以換算后的值作為結(jié)果。MD5 算法主要是為數(shù)字簽名應(yīng)用程序而設(shè)計(jì)的;在這個(gè)數(shù)字簽名應(yīng)用程序中,較大的文件將在加密(這里的加密過程是通過在一個(gè)密碼系統(tǒng)下[如:RSA]的公開密鑰下設(shè)置私有密鑰而完成的)之前以一種安全的方式進(jìn)行壓縮。[來自RFC1321]
MD5用途廣泛,對(duì)數(shù)據(jù)生成信息摘要放置被篡改,為大文件生成唯一的MD5信息摘要,保證文件未被修改。
實(shí)現(xiàn)原理:
MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。
MD5原理參考:
MD5算法原理
SHA1和MD5算法詳解和源碼
SHA算法
安全散列算法(SHA)能計(jì)算出一個(gè)數(shù)字消息所對(duì)應(yīng)到的,長度固定的字符串(又稱消息摘要)的算法。也是一種比較常用的數(shù)據(jù)摘要算法,目前SHA家族主要有五個(gè)算法,對(duì)于這幾種算法SHA家族中有介紹。
介紹
SHA(Secure Hash Algorithm)是由美國專門制定密碼算法的標(biāo)準(zhǔn)機(jī)構(gòu)——美國國家標(biāo)準(zhǔn)技術(shù)研究院(NIST)制定的,SHA系列算法的摘要長度分別為:SHA為20字節(jié)(160位)、SHA256為32字節(jié)(256位)、 SHA384為48字節(jié)(384位)、SHA512為64字節(jié)(512位),由于它產(chǎn)生的數(shù)據(jù)摘要的長度更長,因此更難以發(fā)生碰撞,因此也更為安全,它是未來數(shù)據(jù)摘要算法的發(fā)展方向。由于SHA系列算法的數(shù)據(jù)摘要長度較長,因此其運(yùn)算速度與MD5相比,也相對(duì)較慢。
目前SHA1的應(yīng)用較為廣泛,主要應(yīng)用于CA和數(shù)字證書中,另外在目前互聯(lián)網(wǎng)中流行的BT軟件中,也是使用SHA1來進(jìn)行文件校驗(yàn)的。
實(shí)現(xiàn)原理
給消息附加填充位使其模512與448同余(M%512 == 448)。即使?jié)M足了條件也要填充512位(比特)。填充過程是這樣的:先補(bǔ)一位1,后面一律補(bǔ)0,直至滿足條件。因此至少填充1位,最多填充512位。
因?yàn)槲覀兇鎯?chǔ)的時(shí)候是以字節(jié)為單位存儲(chǔ)的,所以我們的消息的長度(單位:位)一定是8的倍數(shù)。而我們填充的時(shí)候也一定是8位,8位的來填充。也即不可能只填充一個(gè)二進(jìn)制位,至少是8個(gè)二進(jìn)制位(一個(gè)字節(jié))。因此最少填充1個(gè)字節(jié),最多填充64個(gè)字節(jié)(64*8=512)。
在附加填充位完成之后,還要附加長度,即附加64位數(shù)據(jù)來存儲(chǔ)原始消息的長度。因?yàn)樵诟郊犹畛湮煌瓿芍?,消息長度(單位:位)是512與448同余,而此時(shí)再附加64位之后,消息長度就變成了512的整數(shù)倍。
最后我們開始計(jì)算消息摘要的時(shí)候,就是每512位為一組開始計(jì)算的。
其詳細(xì)的實(shí)現(xiàn)參見什么是安全散列算法SHA256?