C++實(shí)現(xiàn)md5加密算法
訪問(wèn)【W(wǎng)RITE-BUG數(shù)字空間】_[內(nèi)附完整源碼和文檔]
用c++實(shí)現(xiàn)md5算法。 開(kāi)發(fā)平臺(tái):Ubuntu14.04
md5
用c++實(shí)現(xiàn)md5算法.
開(kāi)發(fā)平臺(tái)
Ubuntu14.04
運(yùn)行
sudo get-apt install g++
make
./md5_test
md5簡(jiǎn)介
消息摘要算法第五版(英語(yǔ):Message-Digest Algorithm 5,縮寫(xiě)為MD5),是當(dāng)前計(jì)算機(jī)領(lǐng)域用于確保信息傳輸完整一致而廣泛使用的散列算法之一(又譯哈希算法、摘要算法等),主流編程語(yǔ)言普遍已有MD5的實(shí)現(xiàn)。將數(shù)據(jù) (如一段文字)運(yùn)算變?yōu)榱硪还潭ㄩL(zhǎng)度值,是散列算法的基礎(chǔ)原理,MD5的前身有MD2、MD3和MD4。MD5由MD4、MD3、MD2改進(jìn)而來(lái),主要增強(qiáng)算法復(fù)雜度和不可逆性。目前,MD5算法因其普遍、穩(wěn)定、快速的特點(diǎn),仍廣泛應(yīng)用于普通 數(shù)據(jù)的錯(cuò)誤檢查領(lǐng)域。例如在一些BitTorrent下載中,軟件將通過(guò)計(jì)算MD5檢驗(yàn)下載到的文件片段的完整性。MD5已經(jīng)廣泛使用在為文件傳輸提供一定的可靠性方面。例如,服務(wù)器預(yù)先提供一個(gè)MD5校驗(yàn)和,用戶(hù)下載完文件以后, 用MD5算法計(jì)算下載文件的MD5校驗(yàn)和,然后通過(guò)檢查這兩個(gè)校驗(yàn)和是否一致,就能判斷下載的文件是否出錯(cuò)。MD5是輸入不定長(zhǎng)度信息,輸出固定長(zhǎng)度128-bits的算法。經(jīng)過(guò)程序流程,生成四個(gè)32位數(shù)據(jù),最后聯(lián)合起來(lái)成為一個(gè) 128-bits散列?;痉绞綖?,求余、取余、調(diào)整長(zhǎng)度、與鏈接變量進(jìn)行循環(huán)運(yùn)算。得出結(jié)果。
md5算法描述
假設(shè)輸入信息(input message)的長(zhǎng)度為b(bit),我們想要產(chǎn)生它的報(bào)文摘要,在此處b為任意的非負(fù)整數(shù):b也可能為0,也不一定為8的整數(shù)倍,且可能是任意大的長(zhǎng)度。設(shè)該信息的比特流表示如下: M[0] M[1] M[2] ... M[b-1] 計(jì)算此信息的報(bào)文摘要需要如下5步:
1.補(bǔ)位
信息計(jì)算前先要進(jìn)行位補(bǔ)位,設(shè)補(bǔ)位后信息的長(zhǎng)度為L(zhǎng)EN(bit),則LEN%512 = 448(bit),即數(shù)據(jù)擴(kuò)展至 K * 512 + 448(bit)。即K * 64+56(byte),K為整數(shù)。補(bǔ)位操作始終要執(zhí)行,即使補(bǔ)位前信息的長(zhǎng)度對(duì)512求余的結(jié)果是448。具體補(bǔ)位操作:補(bǔ)一個(gè)1,然后補(bǔ)0至滿(mǎn)足上述要求??偣沧钌僖a(bǔ)1bit,最多補(bǔ)512bit。
2.尾部加上信息長(zhǎng)度
將輸入信息的原始長(zhǎng)度b(bit)表示成一個(gè)64-bit的數(shù)字,把它添加到上一步的結(jié)果后面(在32位的機(jī)器上,這64位將用2個(gè)字來(lái)表示并且低位在前)。當(dāng)遇到b大于2^64這種極少的情況時(shí),b的高位被截去,僅使用b的低64位。經(jīng)過(guò)上面兩步,數(shù)據(jù)就被填補(bǔ)成長(zhǎng)度為512(bit)的倍數(shù)。也就是說(shuō),此時(shí)的數(shù)據(jù)長(zhǎng)度是16個(gè)字(32byte)的整數(shù)倍。此時(shí)的數(shù)據(jù)表示為: M[0 ... N-1] 其中的N是16的倍數(shù)。
3.初始化緩存區(qū)
用一個(gè)四個(gè)字的緩沖器(A,B,C,D)來(lái)計(jì)算報(bào)文摘要,A,B,C,D分別是32位的寄存器,初始化使用的是十六進(jìn)制表示的數(shù)字,注意低字節(jié)在前: word A: 01 23 45 67 word B: 89 ab cd ef word C: fe dc ba 98 word D: 76 54 32 10



