摘 要:隨著網(wǎng)絡(luò)技術(shù)的廣泛應(yīng)用,網(wǎng)絡(luò)信息安全越來越引起人們的重視。目前通常將需要存儲(chǔ)的數(shù)據(jù)進(jìn)行加密然后再存儲(chǔ),MD5(Message-Digest algorithm 5)算法是一個(gè)不錯(cuò)的選擇。MD5算法是一種用于產(chǎn)生數(shù)字簽名的單項(xiàng)散列算法。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被“壓縮”成一種保密的格式。
關(guān)鍵詞:信息安全;MD5;加密;封裝
1引言
隨著網(wǎng)絡(luò)通信技術(shù)和Internet的聯(lián)系日益增強(qiáng),出現(xiàn)了一系列與網(wǎng)絡(luò)安全相關(guān)的問題:如對(duì)主機(jī)的攻擊,網(wǎng)絡(luò)上傳輸?shù)男畔⒈唤厝?、篡改、重發(fā)等,由此,它對(duì)網(wǎng)絡(luò)應(yīng)用的進(jìn)一步推廣構(gòu)成了巨大威脅,因此密碼體制[1]就在這種背景下應(yīng)運(yùn)而生了。存儲(chǔ)加密涉及大量文件、資料、新建等文檔處理,需要高效,可靠的進(jìn)行各種信息交換,同時(shí)對(duì)信息流轉(zhuǎn)的整個(gè)過程需要有效的組織和監(jiān)控。數(shù)據(jù)加密技術(shù)不僅具有保證信息機(jī)密性的信息加密功能,而且具有數(shù)字簽名、秘密分存、系統(tǒng)安全等性能。因而可以保障信息的機(jī)密性、完整性和準(zhǔn)確性,防止信息被篡改、偽造和假冒[2]。雖然目前已有很多加密技術(shù)應(yīng)用于各個(gè)領(lǐng)域,但是存在加密強(qiáng)度、運(yùn)算量大等缺陷,因而本文提出了一種新的加密機(jī)制—MD5加密。
2理論基礎(chǔ)
2.1單向散列函數(shù)
單向散列函數(shù)[4]也稱Hash(哈希)函數(shù)。它是現(xiàn)代密碼學(xué)的核心。散列函數(shù)一直在計(jì)算機(jī)科學(xué)中使用,散列函數(shù)就是把可變的輸入長(zhǎng)度串轉(zhuǎn)換成固定長(zhǎng)度輸出值(叫做散列值)的一種函數(shù)。而單向散列函數(shù)是在一個(gè)方向上工作的散列函數(shù),從預(yù)映射的值很容易計(jì)算出它的散列值,但要使它的散列值等于一個(gè)特殊值卻很難。散列值越長(zhǎng)則安全性越好,MD5算法就是單向散列函數(shù)產(chǎn)生128位的散列值,以下即為生成一個(gè)長(zhǎng)散列值的方法:
1)運(yùn)用單向散列函數(shù)生成一則消息的散列值。
2)將該散列值附于消息之后。
3)產(chǎn)生包含散列值和消息在內(nèi)的一連串的數(shù)值的散列值。
4)將(1)產(chǎn)生的散列值與(3)產(chǎn)生的散列值組合起來生成一個(gè)更大的散列值。
5)重復(fù)1)至3)步若干次。
2.2MD5算法的基本原理
MD5算法以512位分組來處理輸入文本,每一分組又劃分為16個(gè)32位子分組。算法的輸出由4個(gè)32位分組組成,將它們級(jí)聯(lián)形成一個(gè)128位散列值[5]。
第1步:MD5在原消息中增加填充位,目的是使原消息長(zhǎng)度等于一個(gè)值,即比512的倍數(shù)少64位。填充后,原消息的長(zhǎng)度為448位(比512少64),960位(比1024少64位),1472位(比1536少64位)等。
第2步:增加填充位后,就要計(jì)算機(jī)消息原長(zhǎng),將其加進(jìn)填充后的消息末尾。先計(jì)算消息長(zhǎng)度,不包括填充位(即增加填充位前的長(zhǎng)度)。這個(gè)消息原長(zhǎng)表示為64位值,添加到加進(jìn)填充后的消息末尾。如果消息長(zhǎng)度超過264位(即64位無法表示,因?yàn)橄⑻L(zhǎng)),則只用長(zhǎng)度的低64位,即等于計(jì)算length mod 264。
第3步:將輸入分成512位的塊。
第4步:初始化四個(gè)鏈接變量,分別稱為A,B,C,D,它們都是32位的數(shù)字,這些鏈接變量的初始十六進(jìn)制值如表1所示,低的字節(jié)在前面。
第5步:處理塊。這是個(gè)循環(huán),對(duì)消息中的多個(gè)512位塊運(yùn)行。
第5.1步:將四個(gè)鏈接變量復(fù)制到四個(gè)變量a,b,c,d中,使a=A,b=B,c=C,d=D。
這個(gè)算法將a,b,c,d組合成128位寄存器(abcd),寄存器(abcd)在實(shí)際算法運(yùn)算中保存中間結(jié)果和最終結(jié)果,如圖1所示。
第5.2步:將當(dāng)前512位塊分解為16個(gè)子塊,每個(gè)子塊為32位,如圖2所示。
第5.3步:主循環(huán)有四輪,每一輪的操作都要處理一個(gè)塊中的16個(gè)子塊。每一輪的輸入如下:(a) 16個(gè)子塊;(b)變量a,b,c,d;(c)常量t。
這四輪中的第1步進(jìn)行不同處理,其他步驟是相同的。每一輪有16個(gè)輸入子塊M[0],M[1],…,M[15],或表示為M[i],其中i為1~15。每個(gè)子塊為32位。t是個(gè)常量數(shù)組,包含64個(gè)元素,每個(gè)元素為32位。我們把數(shù)組t的元素表示為t[1],t[2],…,t[64],或t[i],其中i為1~64。由于有四輪,因此每一輪用64個(gè)t值中的16個(gè)。每一輪輸出的中間和最終結(jié)果復(fù)制到寄存器abcd中:
1)首先對(duì)b, c, d作一次非線性函數(shù)運(yùn)算,這個(gè)運(yùn)算在四輪中不同。
2)變量a加進(jìn)第1步的輸出(即寄存器abcd)。
3)消息子塊M[i]加進(jìn)第2步的輸出(即寄存器abcd)。
4)常量t[i]加進(jìn)第3步輸出(即寄存器abcd)。
5)第4步的輸出(即寄存器abcd)循環(huán)左移s位。
6)變量b加進(jìn)第5步輸出(即寄存器abcd)。
7)第6步的輸出成為下一步的新abcd。
圖3和圖4顯示了MD5操作過程。
對(duì)于每次操作中用到的四個(gè)線性函數(shù),即
F(x,y,z) = (x&y)|((~x)&z) G(x,y,z) = (x&z)|(y&(~z)) H(x,y,z) = x^y^z
I(x,y,z) = y^(x|(~z)),其中,&是與,|是或,~是非,^是異或。這些函數(shù)中,如果x,y和z的對(duì)應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也是獨(dú)立和均勻的,函數(shù)F是按逐位方式操作;函數(shù)H是逐位奇偶操作。
3.結(jié)論
MD5是單向加密算法,加密以后信息不可以解密??梢詫?duì)算法做適當(dāng)?shù)男薷暮脱a(bǔ)充,以更加適合應(yīng)用需要。同時(shí)隨著企業(yè)信息和數(shù)據(jù)的巨大膨脹,以及確保數(shù)據(jù)安全的重要性與日俱增,數(shù)據(jù)的加密有著不可替代的重要性,但隨之而來的問題是效率的降低和數(shù)據(jù)管理的復(fù)雜。高效率、易管理的數(shù)據(jù)安全方案將是未來的研究方向。
參考文獻(xiàn)
[1]楊義先,林曉東.信息安全綜論[M].北京:電信科學(xué)出版社, 1998 .
[2]楊明,齊望東.密碼編碼學(xué)與網(wǎng)絡(luò)安全[M].北京:電子工業(yè)出版社,1997.
[3]彭文波.MD5算法原理及應(yīng)用[EB/OL].中國(guó)知網(wǎng) 1999.2.
[4]桑海,李建寶.加密算法MD5 的研究與應(yīng)用[EB/OL]. 華南金融電腦 1999.7.
[5]潘清芳.使用MD5加密數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)[J].第3 卷第2 期:77-143.
[6]鄭莉,董淵.C++語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2001.
[7]施衛(wèi)鋒, 周俊, 朱利剛.多戶住處系統(tǒng)中數(shù)據(jù)安全性控制及其實(shí)現(xiàn)[EB/OL].微機(jī)發(fā)展.
[8] 段鋼著.加密與解密(第二版)[M].北京:電子工業(yè)出版社,2003.
作者簡(jiǎn)介:武佳杰(1989—),男,山西汾陽人,山西財(cái)經(jīng)大學(xué)2014(計(jì)算機(jī)應(yīng)用技術(shù))學(xué)術(shù)碩士研究生,研究方向:貝葉斯網(wǎng)絡(luò)。