RC4加密算法的實(shí)現(xiàn)網(wǎng)絡(luò)安全課程設(shè)計(jì)報(bào)告書_第1頁
RC4加密算法的實(shí)現(xiàn)網(wǎng)絡(luò)安全課程設(shè)計(jì)報(bào)告書_第2頁
RC4加密算法的實(shí)現(xiàn)網(wǎng)絡(luò)安全課程設(shè)計(jì)報(bào)告書_第3頁
RC4加密算法的實(shí)現(xiàn)網(wǎng)絡(luò)安全課程設(shè)計(jì)報(bào)告書_第4頁
RC4加密算法的實(shí)現(xiàn)網(wǎng)絡(luò)安全課程設(shè)計(jì)報(bào)告書_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、棗 莊 學(xué) 院信息科學(xué)與工程學(xué)院課程設(shè)計(jì)任務(wù)書題 目:RC4加密算法的實(shí)現(xiàn)學(xué) 號(hào):姓 名:專 業(yè): 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù) 課 程: 計(jì)算機(jī)網(wǎng)絡(luò)安全教程 指導(dǎo)教師:職稱: 教 師 完成時(shí)間: 2012年 11月-2012 年 12 月棗莊學(xué)院信息科學(xué)與工程學(xué)院制一.系統(tǒng)設(shè)計(jì)的目標(biāo)隨著信息化的發(fā)展,人們?cè)谛畔鬟f,數(shù)據(jù)共享等方面的要求越來越高。但與此同時(shí),數(shù)據(jù)的、個(gè)人的隱私保護(hù)也越來越困難,迫使人們不得不采取相應(yīng)的措施來提高信息的安全性。在此條件下,加密技術(shù)應(yīng)運(yùn)而生。加密作為一把系統(tǒng)安全的鑰匙,是實(shí)現(xiàn)信息安全的重要手段之一,正確的使用加密技術(shù)可以確保信息的安全。人們所熟悉的加密技術(shù)很多,比如數(shù)字簽名、注

2、冊(cè)、軟盤加密、軟件鎖等等。本人的設(shè)計(jì)思想是利用文件夾的加密來實(shí)現(xiàn)對(duì)軟件或文件的安全加密。在此設(shè)計(jì)基礎(chǔ)上編寫了一個(gè)程序,該軟件操作簡(jiǎn)單方便,適用于個(gè)人PC上對(duì)文件的加密。用戶可自選密鑰對(duì)重要文件或可執(zhí)行程序進(jìn)行加密,防止未授權(quán)用戶竊密。本文描述了利用文件夾的加密來實(shí)現(xiàn)對(duì)文件或程序的保護(hù)方案。采用了“對(duì)稱式”加密技術(shù)即采用文件逐字節(jié)與密碼異或方式對(duì)文件或可執(zhí)行程序加密。選用C+編程語言,設(shè)計(jì)了一個(gè)加密程序,該程序不拘泥于花俏的界面,僅使用了一個(gè)簡(jiǎn)單的對(duì)話框,具有簡(jiǎn)單實(shí)用的特點(diǎn)。在該方案的實(shí)現(xiàn)中,由于使用了可靠的密碼學(xué)算法,使軟件加密的強(qiáng)度大大提高。二.系統(tǒng)原理:1. RC4加密算法原理:RC4加密

3、算法是大名鼎鼎的RSA三人組中的頭號(hào)人物Ron Rivest在1987年設(shè)計(jì)的密鑰長(zhǎng)度可變的流加密算法簇。之所以稱其為簇,是由于其核心部分的S-box長(zhǎng)度可為任意,但一般為256字節(jié)。該算法的速度可以達(dá)到DES加密的10倍左右。 RC4算法的原理很簡(jiǎn)單,包括初始化算法和偽隨機(jī)子密碼生成算法兩大部分。假設(shè)S-box長(zhǎng)度和密鑰長(zhǎng)度均為為n。先來看看算法的初始化部分(用類C偽代碼表示): for (i=0; i<n; i+) s=i; j=0; for (i=0; i<n; i+) j=(j+s+k)%256; swap(s, sj); 在初始化的過程中,密鑰的主要功能是將S-box攪亂

4、,i確保S-box的每個(gè)元素都得到處理,j保證S-box的攪亂是隨機(jī)的。而不同的S-box在經(jīng)過偽隨機(jī)子密碼生成算法的處理后可以得到不同的子密鑰序列,并且,該序列是隨機(jī)的: i=j=0; while (明文未結(jié)束) +i%=n; j=(j+s)%n; swap(s, sj); sub_k=s(s+sj)%n); 得到的子密碼sub_k用以和明文進(jìn)行xor運(yùn)算,得到密文,解密過程也完全一樣。 由于RC4算法加密是采用的xor,所以,一旦子密鑰序列出現(xiàn)了重復(fù),密文就有可能被破解。關(guān)于如何破解xor加密,請(qǐng)參看Bruce Schneier的Applied Cryptography一書的1.4節(jié)Sim

5、ple XOR,在此我就不細(xì)說了。那么,RC4算法生成的子密鑰序列是否會(huì)出現(xiàn)重復(fù)呢?經(jīng)過我的測(cè)試,存在部分弱密鑰,使得子密鑰序列在不到100萬字節(jié)就發(fā)生了完全的重復(fù),如果是部分重復(fù),則可能在不到10萬字節(jié)就能發(fā)生重復(fù),因此,推薦在使用RC4算法時(shí),必須對(duì)加密密鑰進(jìn)行測(cè)試,判斷其是否為弱密鑰。 但在2001年就有以色列科學(xué)家指出RC4加密算法存在著漏洞,這可能對(duì)無線通信網(wǎng)絡(luò)的安全構(gòu)成威脅。 以色列茨曼研究所和美國(guó)思科公司的研究者發(fā)現(xiàn),在使用“有線等效規(guī)則”(WEP)的無線網(wǎng)絡(luò)中,在特定情況下,人們可以逆轉(zhuǎn)RC4算法的加密過程,獲取密鑰,從而將己加密的信息解密。實(shí)現(xiàn)這一過程并不復(fù)雜,只需要使用一臺(tái)

6、個(gè)人電腦對(duì)加密的數(shù)據(jù)進(jìn)行分析,經(jīng)過幾個(gè)小時(shí)的時(shí)間就可以破譯出信息的全部容。 專家說,這并不表示所有使用RC4算法的軟件都容易泄密,但它意味著RC4算法并不像人們?cè)日J(rèn)為的那樣安全。這一發(fā)現(xiàn)可能促使人們重新設(shè)計(jì)無線通信網(wǎng)絡(luò),并且使用新的加密算法。三. 系統(tǒng)功能分析:圖1:系統(tǒng)功能圖四.系統(tǒng)實(shí)現(xiàn): 設(shè)計(jì)的核心部分仍是算法的核心部分,根據(jù)des算法的原理,建立相關(guān)的變量,和函數(shù),完成對(duì)8位字符的加密,解密。而對(duì)于文件的加密與解密只需要在文件的讀取時(shí),按加密的位數(shù)讀取然后調(diào)用算法,加密后保存到一個(gè)文件,一直到文件的末尾,從而實(shí)現(xiàn)文件的加密。而解密是加密的逆過程,只要將密鑰按反順序使用即可,算法一致,調(diào)

7、用的函數(shù)也都一樣。1.功能要求(1)設(shè)計(jì)操作界面;(如圖3) 圖3(2)對(duì)輸入的明文可以進(jìn)行加解密;(如圖4)(3)對(duì)指定的文件可以加解密。(圖5)對(duì)文件夾進(jìn)行解密:(圖6)詳細(xì)設(shè)計(jì) 字符加解密數(shù)據(jù)流圖明文明文傳輸密文加密密鑰解密密鑰解密加密明文明文傳輸密文加密密鑰解密密鑰解密加密明文明文傳輸密文加密密鑰解密密鑰解密加密 字符加解密數(shù)據(jù)流圖(7) 一層數(shù)據(jù)流圖(8) 二層數(shù)據(jù)流圖(9)附錄:源程序代碼:RC4算法的實(shí)現(xiàn):void RC4:swap(baseType *i,baseType *j)baseType temp;temp=*i;*i=*j;*j=temp;void RC4:s_box

8、(baseType *s,char *key,int keyLen)int i=0,j=0;for(i=0;i<256;i+)si=i;for(i=0;i<256;i+)j=(j+si+keyi%keyLen)%256;swap(&si,&sj);void RC4:encryption(char *src,char *key,int keyLen,int srcLen)int i=0,j=0,k=0,index=0;baseType s256;:memset(void *)s,0,256);s_box(s,key,keyLen);for(i=0;i<srcLe

9、n;i+)+j%=256;k=(k+sj)%256;swap(&sj,&sk);index=(sj+sk)%256;srci=sindex;我寫的代碼:字符串解密:char *key=new char;m_key.GetWindowText(key,255);CString strKey(" ",256);strKey.Format("%s",key);if(strKey.IsEmpty()MessageBox("你還沒有輸入密鑰!",NULL,MB_OK);return;char *src=new char;m_de

10、tStr.GetWindowText(src,100);CString strSrc(" ",101);strSrc.Format("%s",strSrc);if(strSrc.IsEmpty()MessageBox("請(qǐng)輸入你要加密的字符串!",NULL,MB_OK);return;rc4.encryption(src,key,(int)strlen(key),(int)strlen(src);m_srcStr.SetWindowText(src);字符串加密:char *key=new char;m_key.GetWindowTe

11、xt(key,255);CString strKey(" ",256);strKey.Format("%s",key);if(strKey.IsEmpty()MessageBox("你還沒有輸入密鑰!",NULL,MB_OK);return;char *src=new char;m_srcStr.GetWindowText(src,100);CString strSrc(" ",101);strSrc.Format("%s",strSrc);if(strSrc.IsEmpty()MessageB

12、ox("請(qǐng)輸入你要加密的字符串!",NULL,MB_OK);return;rc4.encryption(src,key,(int)strlen(key),(int)strlen(src);m_detStr.SetWindowText(src);到上面那部分打開文件:CString lpszFilter="text file (*.txt)|*.txt|Microsoft doc (*.doc)|*.doc|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*|"CString readBuf(

13、" ",1000);CString lpszDefExt=".txt"CString lpszFileName="*.txt"char *ch1=new char;char ch9;:memset(void *)ch,0,9);char str200;:memset(void *)str,0,200);CFileDialog *fileOpen=new CFileDialog( true, lpszDefExt, lpszFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFil

14、ter, NULL );if(!fileOpen->DoModal()MessageBox("Open failly!",NULL,MB_OK);return;CString filePath=fileOpen->GetPathName();m_srcFile.SetWindowText(LPCTSTR(filePath);保存文件:CString lpszFilter="text file (*.txt)|*.txt|Microsoft doc (*.doc)|*.doc|Data Files (*.xlc;*.xls)|*.xlc; *.xls|A

15、ll Files (*.*)|*.*|"CString lpszDefExt=".txt"CString lpszFileName="*.txt"CFileDialog *fileSave=new CFileDialog( false, lpszDefExt, lpszFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter, NULL );CFile cFile;if(!fileSave->DoModal()MessageBox("failed!",NU

16、LL,MB_OK);return;CArchive ar(&cFile,CArchive:load);CString filePath=fileSave->GetPathName();m_detFile.SetWindowText(filePath);if(cFile.Open(LPCTSTR(filePath),CFile:modeCreate|CFile:modeWrite)=0)MessageBox("Open failly!",NULL,MB_OK);return;文件加密:char key256;:memset(void *)key,' &#

17、39;,256);char ch101;:memset(void *)ch,' ',101);m_key.GetWindowText(key,strlen(key);CString key1;key1.Format("%s",key);if(key1.IsEmpty()MessageBox("你還沒有輸入密鑰!",NULL,MB_OK);return;CString srcFilePath(" ",200);m_srcFile.GetWindowText(srcFilePath);if(srcFilePath.IsEm

18、pty()MessageBox("你還沒有選擇源文件",NULL,MB_OK);return;CFile srcFile;if(srcFile.Open(LPCTSTR(srcFilePath),CFile:modeRead)=0)MessageBox("源文件打開失敗!",NULL,MB_OK);return;CArchive srcAr(&srcFile,CArchive:load);int fileLen=srcFile.GetLength();CString detFilePath(" ",200);m_detFile

19、.GetWindowText(detFilePath);if(detFilePath.IsEmpty()MessageBox("你還沒有選擇目標(biāo)文件",NULL,MB_OK);return;CFile detFile;if(detFile.Open(LPCTSTR(detFilePath),CFile:modeCreate|CFile:modeWrite)=0)MessageBox("目標(biāo)文件打開失敗!",NULL,MB_OK);return;CString len;len.Format("%d",fileLen);if(fileLe

20、n<=100)srcFile.Read(void *)ch,fileLen);rc4.encryption(ch,key,strlen(key),strlen(ch);detFile.Write(void *)ch,strlen(ch);if(fileLen>100)int k=0,i=0;k=fileLen/100;for(i=0;i<k;i+)srcFile.Read(void *)ch,100);rc4.encryption(ch,key,strlen(key),100);detFile.Write(void *)ch,100);k=fileLen%100;if(k!=

21、0)srcAr.Read(void *)ch,k);rc4.encryption(ch,key,strlen(key),k);detFile.Write(void *)ch,k);MessageBox("恭喜您,加密成功!",NULL,MB_OK);srcFile.Close();detFile.Close();文件解密:char key256;:memset(void *)key,' ',256);char ch101;:memset(void *)ch,' ',101);m_key.GetWindowText(key,strlen(key

22、);CString key1;key1.Format("%s",key);if(key1.IsEmpty()MessageBox("你還沒有輸入密鑰!",NULL,MB_OK);return;CString srcFilePath(" ",200);m_srcFile1.GetWindowText(srcFilePath);if(srcFilePath.IsEmpty()MessageBox("你還沒有選擇源文件",NULL,MB_OK);return;CFile srcFile;if(srcFile.Open(L

23、PCTSTR(srcFilePath),CFile:modeRead)=0)MessageBox("源文件打開失敗!",NULL,MB_OK);return;CArchive srcAr(&srcFile,CArchive:load);int fileLen=srcFile.GetLength();CString detFilePath(" ",200);m_detFile1.GetWindowText(detFilePath);if(detFilePath.IsEmpty()MessageBox("你還沒有選擇目標(biāo)文件",N

24、ULL,MB_OK);return;CFile detFile;if(detFile.Open(LPCTSTR(detFilePath),CFile:modeCreate|CFile:modeWrite)=0)MessageBox("目標(biāo)文件打開失敗!",NULL,MB_OK);return;CString len;len.Format("%d",fileLen);if(fileLen<=100)srcFile.Read(void *)ch,fileLen);rc4.encryption(ch,key,strlen(key),strlen(ch);

25、detFile.Write(void *)ch,strlen(ch);if(fileLen>100)int k=0,i=0;k=fileLen/100;for(i=0;i<k;i+)srcFile.Read(void *)ch,100);rc4.encryption(ch,key,strlen(key),100);detFile.Write(void *)ch,100);k=fileLen%100;if(k!=0)srcAr.Read(void *)ch,k);rc4.encryption(ch,key,strlen(key),k);detFile.Write(void *)ch,

26、k);MessageBox("恭喜您,解密成功!",NULL,MB_OK);srcFile.Close();detFile.Close();界面設(shè)計(jì):m_tab.InsertItem(0," 字符串加密 ");m_tab.InsertItem(1," 文件加密 ");cPage0.Create(IDD_PAGE0_DIALOG,GetDlgItem(IDC_TAB1);cPage1.Create(IDD_PAGE1_DIALOG,GetDlgItem(IDC_TAB1);CRect rect; m_tab.GetClientRect(

27、&rect); rect.top+=20; rect.bottom-=4; rect.left+=4; rect.right-=4; cPage0.MoveWindow(&rect); cPage1.MoveWindow(&rect); cPage0.ShowWindow(TRUE); m_tab.SetCurSel(0);int CurSel; CurSel=m_tab.GetCurSel(); switch(CurSel) case 0: cPage0.ShowWindow(TRUE); cPage1.ShowWindow(FALSE); break; case 1

28、: cPage0.ShowWindow(FALSE); cPage1.ShowWindow(TRUE); break; case 2: cPage0.ShowWindow(FALSE); cPage1.ShowWindow(FALSE); break; default: ; *pResult = 0;五.總結(jié):提出問題:RC4加密后的的長(zhǎng)度是 多少(例如MD5的加密后的長(zhǎng)度是固定的)? 用RC4加密后的字符串長(zhǎng)度和原來的一樣嗎? 用RC4加密后的字符串中間會(huì)不會(huì)出現(xiàn)0? 用strlen得到的長(zhǎng)度一定對(duì)嗎?解決問題:在一些場(chǎng)合,常需要用到一些簡(jiǎn)單的加密算法,這里的RC4就可以說是最簡(jiǎn)單的一種。只

29、要設(shè)置一個(gè)足夠強(qiáng)的密碼,就可以適用于一些非常簡(jiǎn)單的場(chǎng)合了。我是用來加密 傳送的數(shù)據(jù)的。 RC4函數(shù)(加密/解密)    其實(shí),RC4只有加密,將密文再加密一次,就是解密了。 GetKey函數(shù)  隨機(jī)字符串產(chǎn)生器,呵呵,為了方便,大多數(shù)加密算法都有一個(gè)隨碼產(chǎn)生器,我也就附帶一個(gè)了。 ByteToHex函數(shù)  把字節(jié)碼轉(zhuǎn)為十六進(jìn)制碼,一個(gè)字節(jié)兩個(gè)十六進(jìn)制。研究發(fā)現(xiàn),十六進(jìn)制字符串非常適合在 中傳輸,Base64中的某些字符會(huì)造成轉(zhuǎn)義,挺麻煩的。 HexToByte函數(shù)  把十六進(jìn)制字符串,轉(zhuǎn)為字節(jié)碼。服務(wù)器也按照十六進(jìn)制字符串的形式把數(shù)據(jù)傳回來,這里就可以解碼啦。同時(shí),使用十六進(jìn)制字符串傳輸,避開了傳輸過程中多國(guó)語言的問題。 Encrypt函數(shù)    把字符串經(jīng)RC4加密后,再把密文轉(zhuǎn)為十六進(jìn)制字符串返回,可直接用于傳輸。 Decrypt函數(shù)    直接密碼十六進(jìn)制字符串密文,再解密,返回字符串明

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論