◆任 雁
?
基于UDP傳輸?shù)拇髷?shù)據(jù)加解密技術(shù)
◆任 雁
(長治學(xué)院計算機系 山西 046011)
在網(wǎng)絡(luò)傳輸日益頻繁的今天,數(shù)據(jù)文件的加密技術(shù),顯得尤為重要,是數(shù)據(jù)安全傳輸?shù)挠行ПU?,本文首先對網(wǎng)絡(luò)數(shù)據(jù)的加密方式進行了分類概述,對大文件(格式不限)的實時加解密進行了深入探討及具體實現(xiàn),使UDP協(xié)議不僅在大數(shù)據(jù)的可靠傳輸上,同時也在安全性上得到了充足保障。
UDP傳輸;加密;解密
數(shù)據(jù)加密,是通過特定的加密算法和密鑰,將可識別的文件轉(zhuǎn)化為不可讀的密文,數(shù)據(jù)解密與之相反,將不可讀的密文轉(zhuǎn)化為可讀的明文。數(shù)據(jù)加解密在現(xiàn)實中有廣泛的應(yīng)用,它是對數(shù)據(jù)信息在網(wǎng)絡(luò)傳輸中進行保護的最有效手段。早期,密碼只針對文字等簡單信息進行加、解密,但隨著技術(shù)的發(fā)展與進步,現(xiàn)在,對語音、圖像等復(fù)雜的數(shù)據(jù)類型都可進行加、解密轉(zhuǎn)換。本文提出的方法可以對任意類型、任意大小的數(shù)據(jù)文件進行加、解密處理,為UDP大數(shù)據(jù)的傳輸提供了安全保障。
1.1對稱加密算法
是指在加、解密的過程中,都使用相同的密鑰進行加解密的算法,該算法的優(yōu)點是加解密過程的高效率,及使用長密鑰時破譯困難。
1.2 非對稱加密算法
是指在加、解密的過程中,使用不同的密鑰進行加解密的算法,密鑰分公鑰和私鑰,公鑰是公開的,用于加密過程,私鑰是不公開的,用于解密過程,解密一方只需要保管好自己的私鑰即可,非對稱加密的優(yōu)點是密鑰的隱蔽性更強,但缺點是其加解密的效率要遠遠低于對稱加密。
1.3 Hash算法
Hash算法比較特別的地方在于,它是一種單向算法,即通過Hash算法對目標(biāo)數(shù)據(jù)生成一段特定長度且唯一的Hash值,但卻不能通過這個Hash值逆向獲得源信息。
本文使用C++代碼來具體實現(xiàn),因為是對任意大小、任意格式的文件進行加、解密,考慮到過程的時效性,本文主要采用效率更高的對稱加密算法,密碼可以由用戶自行設(shè)定和輸入,系統(tǒng)根據(jù)用戶輸入的密碼生成密鑰,在創(chuàng)建密鑰的過程中,還使用了Hash算法,之后使用密鑰對源文件進行加解密處理,最終將結(jié)果創(chuàng)建為新的文件。
2.1 聲明數(shù)據(jù)類型
首先,在頭文件中聲明相關(guān)數(shù)據(jù)類型,包括文件指針、密鑰對象、Hash對象、緩存大小等,同時聲明相關(guān)函數(shù),例如初始化函數(shù)BOOL InitCrypt();加密前處理函數(shù)BOOL CryptProcess(CFile*lpSourceFile,CFile*lpDestFile,LPSTRlpPassword);加密函數(shù)BOOL JiaMiFile(CFile* lpSourceFile,CFile * lpDestFile,LPSTRlpPassword)等。
2.2 獲取源文件擴展名
因為是對任意類型文件進行加、解密處理,所以需首先獲取源文件擴展名,kuozhanming=PathFindExtension((LPCWSTR) FilePathName);同時創(chuàng)建相同類型空文件,用來存放加密后內(nèi)容數(shù)據(jù)。
2.3處理數(shù)據(jù)長度及分配內(nèi)存空間
相關(guān)初始化工作(包括創(chuàng)建上下文、創(chuàng)建Hash對象等)結(jié)束后,還需定義一次處理數(shù)據(jù)長度m_dwBufferLen=m_dwBlock Len+ENCRYPT_BLOCK_SIZE;及分配相應(yīng)內(nèi)存空間m_pbBuffer=(BYTE*)malloc(m_dwBufferLen)。
2.4密鑰生成
在正式加密源文件前,還需將用戶輸入的密碼轉(zhuǎn)化為Hash數(shù)據(jù)CryptHashData(m_hHash, (BYTE*)lpPassword, strlen(lp- Password),0);并生成密鑰CryptDeriveKey(m_hCryptProv, ENCRYPT_ALGORITHM,m_hHash,KEYLENGTH,&m_hKey)。
2.5文件加密
正式加密開始后,需將源文件逐段加密:
CryptEncrypt(m_hKey,0,eof==m_hSource->GetPosition(),0,m_pbBuffer,&m_dwCount,m_dwBufferLen);
并將加密后的數(shù)據(jù)放入目標(biāo)文件:
m_hDestination->Write (m_pbBuffer,m_dwCount);
直到源文件全部讀取完畢,自此,源文件已全部加密為不可讀的密文,存放于一個新的文件中。
2.6解密處理
解密的過程與此相反,需逐段讀取密文:
m_dwCount=m_hSource->Read(m_pbBuffer,m_dwBufferLen);同時進行解密處理:
CryptDecrypt(m_hKey,0,eof1==m_hSource->GetPosition(),0,m_pbBuffer,&m_dwCount);并將解密后的數(shù)據(jù)段存入指定文件m_hDestination->Write(m_pbBuffer,m_dwCount);直至整段密文被讀取完畢。
UDP協(xié)議是面向非連接的傳輸協(xié)議,其優(yōu)點是傳輸?shù)膶崟r高效性,占用系統(tǒng)資源相對較少,但其缺點是傳輸協(xié)議對數(shù)據(jù)本身的完整性缺乏有效保證。所以,除通過收發(fā)確認、延時重發(fā)等有效機制確保傳輸數(shù)據(jù)的完整性外,本文通過特定加、解密算法,大大增強了傳輸數(shù)據(jù)的安全性,使UDP協(xié)議在大數(shù)據(jù)傳輸實際應(yīng)用中,不僅能發(fā)揮其傳輸過程的高效性,還能有效保障其傳輸數(shù)據(jù)內(nèi)容的安全性。
數(shù)據(jù)文件的加、解密技術(shù),在現(xiàn)實中有廣泛的應(yīng)用,它可以有效保障數(shù)據(jù)內(nèi)容在傳輸過程中的隱秘性、安全性,同時結(jié)合UDP協(xié)議不僅可以實現(xiàn)點對點的穿透,還可以確保大文件實時傳輸?shù)耐暾约皟?nèi)容的安全性,在網(wǎng)絡(luò)應(yīng)用日益普遍的今天,提供了諸多便捷。
[1]盧開澄編.著計算機密碼學(xué)[M].清華大學(xué)出版社, 2003.
[2]黃河明.數(shù)據(jù)加密技術(shù)及其在網(wǎng)絡(luò)安全傳輸中的應(yīng)用[D].廈門大學(xué):碩士學(xué)位論文,2008.
[3]王全民,周清,劉宇明等.文件透明加密技術(shù)研究[J].計算機技術(shù)與發(fā)展,2010.