常用的數(shù)字摘要算法有MD5
,SHA
等,下面這對這些數(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
的算法較慢但相對安全底哥,MD4
速度很快,但安全性下降房官,MD5
比MD4
更安全趾徽、速度更快。
介紹
MD5
報(bào)文摘要算法:MD5
報(bào)文摘要算法將任意長度的信息作為輸入值翰守,并將其換算成一個 128 位長度的"指紋信息"或"報(bào)文摘要"值來代表這個輸入值孵奶,并以換算后的值作為結(jié)果。MD5
算法主要是為數(shù)字簽名應(yīng)用程序而設(shè)計(jì)的蜡峰;在這個數(shù)字簽名應(yīng)用程序中了袁,較大的文件將在加密(這里的加密過程是通過在一個密碼系統(tǒng)下[如:RSA]的公開密鑰下設(shè)置私有密鑰而完成的)之前以一種安全的方式進(jìn)行壓縮。[來自RFC1321]
MD5
用途廣泛湿颅,對數(shù)據(jù)生成信息摘要放置被篡改载绿,為大文件生成唯一的MD5
信息摘要,保證文件未被修改油航。
實(shí)現(xiàn)原理:
MD5
以512位分組來處理輸入的信息卢鹦,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后劝堪,算法的輸出由四個32位分組組成冀自,將這四個32位分組級聯(lián)后將生成一個128位散列值。
MD5原理參考:
MD5算法原理
SHA1和MD5算法詳解和源碼
SHA算法
安全散列算法(SHA
)能計(jì)算出一個數(shù)字消息所對應(yīng)到的秒啦,長度固定的字符串(又稱消息摘要)的算法熬粗。也是一種比較常用的數(shù)據(jù)摘要算法,目前SHA家族主要有五個算法余境,對于這幾種算法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相比,也相對較慢蜜葱。
目前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)槲覀兇鎯Φ臅r(shí)候是以字節(jié)為單位存儲的舞骆,所以我們的消息的長度(單位:位)一定是8的倍數(shù)钥弯。而我們填充的時(shí)候也一定是8位,8位的來填充督禽。也即不可能只填充一個二進(jìn)制位脆霎,至少是8個二進(jìn)制位(一個字節(jié))。因此最少填充1個字節(jié)狈惫,最多填充64個字節(jié)(64*8=512)睛蛛。
在附加填充位完成之后,還要附加長度胧谈,即附加64位數(shù)據(jù)來存儲原始消息的長度忆肾。因?yàn)樵诟郊犹畛湮煌瓿芍螅㈤L度(單位:位)是512與448同余菱肖,而此時(shí)再附加64位之后客冈,消息長度就變成了512的整數(shù)倍。
最后我們開始計(jì)算消息摘要的時(shí)候稳强,就是每512位為一組開始計(jì)算的场仲。
其詳細(xì)的實(shí)現(xiàn)參見什么是安全散列算法SHA256和悦?