摘要:MD5算法(Message-Digest Algorithm 5,信息-摘要算法5)是一種針對(duì)信息傳輸中對(duì)原始信息進(jìn)行重新編列及重新組合的數(shù)學(xué)方法,是數(shù)學(xué)理論應(yīng)用在計(jì)算機(jī)領(lǐng)域的一個(gè)典型事例。MD5算法是一種免費(fèi)使用且安全的散列算法,經(jīng)MD5算法處理后的密文一般不能恢復(fù)成原文,所以要破解MD5算法非常困難。在信息管理系統(tǒng)中,MD5一般用于用戶注冊(cè)口令的加密。使用MD5算法之前要先把完整的數(shù)據(jù)信息(如漢字)通過(guò)運(yùn)算劃分成一個(gè)個(gè)細(xì)小的定長(zhǎng)部分,之后才能使用算法把用數(shù)字簽名軟件簽署私人密鑰后所產(chǎn)生的大容量信息壓縮成一種保密的格式,即把一個(gè)任意長(zhǎng)度的字節(jié)串通過(guò)MD5加密算法變成一定長(zhǎng)度的十六進(jìn)制數(shù)字字符串。
關(guān)鍵詞:MD5算法;散列算法;數(shù)字簽名
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)12-2751-02
MD5算法能將輸入的不定長(zhǎng)度信息,變換為固定長(zhǎng)度128bits?;痉绞綖榍笥?、取余、調(diào)整長(zhǎng)度與鏈接變量進(jìn)行循環(huán)運(yùn)算,最后得出結(jié)果。
MD5運(yùn)算由64次循環(huán)構(gòu)成,分成4組16次。F表示非線性函數(shù),Mi表示一個(gè)32位的輸入數(shù)據(jù),Ki表示一個(gè)32位的常數(shù),用于完成每次不同的計(jì)算。
MD5加密算法簡(jiǎn)要描述為:將輸入的任意長(zhǎng)度的消息,以512位進(jìn)行分組,不足512位的用0填充,再將每組分為16個(gè)32位的子分組,經(jīng)過(guò)一系列的算法處理后,輸出4個(gè)32位的子分組,將這4個(gè)分組級(jí)聯(lián)成一個(gè)128位的消息摘要。
MD5加密算法步驟:
1)填充消息,使消息長(zhǎng)度與448模512同余。至此,消息長(zhǎng)度被擴(kuò)展到N*512+448位,N為非負(fù)整數(shù)。填充方法為:在消息后面添加一個(gè)1,再補(bǔ)充多個(gè)0,直到消息長(zhǎng)度恰好是512的整數(shù)倍。
2)在消息后面添加一個(gè)用64位表示的填充前的消息長(zhǎng)度。
上述兩步處理所得的消息長(zhǎng)度=N*512+448+64=(N+1)*512,正好為512的整數(shù)倍。這樣滿足了后續(xù)處理中對(duì)消息數(shù)據(jù)長(zhǎng)度的要求和規(guī)范。
3) 給四個(gè)32位的整型鏈接變量(Chaining Variable)賦值,依次為:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。將這四個(gè)鏈接變量拷貝到四個(gè)數(shù)據(jù)變量中:A復(fù)制到a,B復(fù)制到b,C復(fù)制到c,D復(fù)制到d。
4)進(jìn)行消息處理。首輪循環(huán)需要進(jìn)行16次操作,每次操作要對(duì)a、b、c和d 4個(gè)變量中的任意3個(gè)作一次邏輯運(yùn)算,并將計(jì)算結(jié)果與未經(jīng)運(yùn)算的第四個(gè)變量相加。把上述運(yùn)算結(jié)果向左循環(huán)移動(dòng)一個(gè)不定的數(shù),再加上a、b、c或d 四個(gè)變量中的任意一個(gè)。最后用這個(gè)結(jié)果替換a、b、c或d 四個(gè)變量中的一個(gè)。循環(huán)的累計(jì)次數(shù)是512位消息分組的總計(jì)數(shù)目。
1 基于MD5算法的用戶敏感數(shù)據(jù)隱私保護(hù)模塊設(shè)計(jì)
在拆遷信息管理平臺(tái)中,需要對(duì)一些敏感的用戶數(shù)據(jù)信息如帳號(hào)密碼,身份證驗(yàn)證碼等進(jìn)行不可逆且安全的加密,下面給出部分本系統(tǒng)中基于MD5加密算法的信息隱私保護(hù)模塊核心代碼:
1)MD5 16位加密模塊
// MD5 16位加密,加密后密碼為大寫(xiě)
static string Get16Md5UpperStr(string str)
{CryptoMD5 md = new CryptoMD5();
string str1=BitConverter.ToString(md.CalculateHash(UTF8Encoding.Default.
GetBytes(str)),4,8);
str1 = str1.Replace("*", "");
return str1; }
// MD5 16位加密,加密后密碼為小寫(xiě)
static string Get16Md5LowerStr(string str)
{CryptoMD5 md = new CryptoMD5();
string str1=BitConverter.ToString(md. CalculateHash (UTF8Encoding.Default.
GetBytes(str)),4,8);
str1= str1.Replace("*", "");
str1= str1.ToLower();
return str1; }
2)MD5 32位加密模塊
static string UserMd5 (string str)
{ string s1 = str;
string pwd = "";
CryptoMD5 md = CryptoMD5.Create();//實(shí)例化一個(gè)md5對(duì)像
// 加密后是一個(gè)字節(jié)類型的數(shù)組,這里要注意編碼UTF8/Unicode等的選擇
byte[] bt = md. CalculateHash (Encoding.UTF8.GetBytes(sl));
for (int i = 0; i < bt.Length; ++i)
{pwd = pwd + bt[i].ToString("*");
} return pwd; }
2 Web信息系統(tǒng)中的隱私數(shù)據(jù)加密處理
一般來(lái)說(shuō),網(wǎng)站的體系結(jié)構(gòu)由數(shù)據(jù)庫(kù)層、客戶端和服務(wù)器三部分組成。當(dāng)客戶端向服務(wù)器發(fā)送請(qǐng)求時(shí),Web服務(wù)器接收用戶請(qǐng)求并查詢數(shù)據(jù)庫(kù),將動(dòng)態(tài)生成的網(wǎng)頁(yè)發(fā)送給客戶端。
加密技術(shù)在網(wǎng)絡(luò)傳輸中的應(yīng)用分為在客戶端進(jìn)行加密和在服務(wù)器端進(jìn)行加密。在客戶端加密時(shí),客戶端先對(duì)數(shù)據(jù)進(jìn)行加密,再把密文傳送給服務(wù)器,服務(wù)器對(duì)接收到的密文進(jìn)行解密操作。在服務(wù)器端加密數(shù)據(jù)的過(guò)程與客戶端一樣,亦即是先對(duì)數(shù)據(jù)進(jìn)行加密后傳給客戶端,客戶端再對(duì)密文進(jìn)行解密。
通常,Web網(wǎng)站的客戶端和服務(wù)器使用網(wǎng)頁(yè)腳本加解密數(shù)據(jù)。綜合對(duì)稱加密算法與非對(duì)稱加密算法的優(yōu)勢(shì),拆遷Web系統(tǒng)采用如下的加密技術(shù)操作:
1)服務(wù)器收到客戶端的訪問(wèn)請(qǐng)求后,通過(guò)調(diào)用相應(yīng)的后臺(tái)事件處理程序,根據(jù)公開(kāi)密鑰算法產(chǎn)生一組公開(kāi)密鑰和私有密鑰,并將公開(kāi)密鑰作為加密密鑰。之后,服務(wù)器把加密密鑰和動(dòng)態(tài)生成的網(wǎng)頁(yè)傳輸用戶端。
2)客戶端收到網(wǎng)頁(yè)后,調(diào)用公開(kāi)密鑰算法函數(shù),產(chǎn)生一組對(duì)稱密鑰,把公開(kāi)密鑰當(dāng)作加密密鑰,然后傳給服務(wù)器。由此建立客戶端與服務(wù)器之間的加密數(shù)據(jù)傳輸。
3)服務(wù)器使用客戶端的加密密鑰進(jìn)行數(shù)據(jù)加密,客戶端使用自己的私有密鑰對(duì)接收到的密文進(jìn)行解密。
4)客戶端使用服務(wù)器的加密密鑰進(jìn)行數(shù)據(jù)加密,服務(wù)器使用自己的私有密鑰對(duì)接收到的密文進(jìn)行解密。
由于客戶端和服務(wù)器端所使用的密碼都是由算法動(dòng)態(tài)獲得,因此所用的密碼只在本次通信中有效。這樣極大地提高了傳輸數(shù)據(jù)的安全性和有效性,解決了密鑰管理難的問(wèn)題。
考慮到公開(kāi)密鑰算法的加密速度比較慢,當(dāng)業(yè)務(wù)數(shù)據(jù)量增加時(shí),使用公開(kāi)密鑰算法是不實(shí)際的。因此本系統(tǒng)使用對(duì)稱加密和非對(duì)稱加密技術(shù)相結(jié)合的方法來(lái)解決上述問(wèn)題,假設(shè)對(duì)稱加密算法的加密密鑰為Ka,則先用Ka對(duì)數(shù)據(jù)信息進(jìn)行加密,再用公開(kāi)密鑰算法對(duì)Ka進(jìn)行加密;進(jìn)行解密時(shí),先解出Ka,再用Ka將數(shù)據(jù)信息解密成原文。
3 結(jié)論
該文首先介紹了MD5算法的原理,由于MD5算法具有破解困難,免費(fèi)且安全的特點(diǎn),在安全訪問(wèn)控制模塊可使用MD5算法對(duì)用戶敏感的隱私信息進(jìn)行加密。其次,本章論述了對(duì)稱加密與非對(duì)稱加密的特點(diǎn),就其各自的優(yōu)點(diǎn)采取折中的辦法,即用對(duì)稱加密算法對(duì)數(shù)據(jù)信息進(jìn)行加密,再用非對(duì)稱加密算法對(duì)對(duì)稱加密算法的密碼進(jìn)行加密;在解密時(shí),先解出對(duì)稱加密算法的密碼,再使用該密碼將數(shù)據(jù)信息解密成原文。綜上所述,實(shí)現(xiàn)了本項(xiàng)目所有安全模塊的代碼編寫(xiě)和相關(guān)調(diào)試工作,取得了良好的運(yùn)行效果。
參考文獻(xiàn):
[1] 行燕,高榮芳. 基于角色訪問(wèn)控制機(jī)制在web信息系統(tǒng)中的應(yīng)用[J]. 現(xiàn)代電子技術(shù),2007,16(255):157-159.
[2] 傅豐,洪源. RBAC訪問(wèn)控制角色的研究與應(yīng)用[J]. 河南科技學(xué)院學(xué)報(bào),2011,39(4):73-77.
[3] 喬穎,須德,戴國(guó)忠. 一種基于角色訪問(wèn)控制(RBAC)的新模型及其實(shí)現(xiàn)機(jī)制[J]. 計(jì)算機(jī)研究與發(fā)展,2000,37(1):37-44.
[4] 廖福保. 細(xì)粒度的基于角色和任務(wù)的Web訪問(wèn)控制模型[J]. 微電子學(xué)與計(jì)算機(jī),2010,27(10):57-60.