RC4加密算法的實現(xiàn)網(wǎng)絡安全課程設計_第1頁
RC4加密算法的實現(xiàn)網(wǎng)絡安全課程設計_第2頁
RC4加密算法的實現(xiàn)網(wǎng)絡安全課程設計_第3頁
RC4加密算法的實現(xiàn)網(wǎng)絡安全課程設計_第4頁
RC4加密算法的實現(xiàn)網(wǎng)絡安全課程設計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

8、c4:s_box(basetype *s,char *key,int keylen)int i=0,j=0;for(i=0;i256;i+)si=i;for(i=0;i256;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;idomodal()messageb

9、ox(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|all files (*.*)|*.*|;cstring lpszdefext=.txt;cstring lpszfilename=*.t

10、xt;cfiledialog *filesave=new cfiledialog( false, lpszdefext, lpszfilename, ofn_hidereadonly | ofn_overwriteprompt, lpszfilter, null );cfile cfile;if(!filesave-domodal()messagebox(failed!,null,mb_ok);return;carchive ar(&cfile,carchive:load);cstring filepath=filesave-getpathname();m_detfile.setwindowt

11、ext(filepath);if(cfile.open(lpctstr(filepath),cfile:modecreate|cfile:modewrite)=0)messagebox(open failly!,null,mb_ok);return;文件加密:char key256;:memset(void *)key, ,256);char ch101;:memset(void *)ch, ,101);m_key.getwindowtext(key,strlen(key);cstring key1;key1.format(%s,key);if(key1.isempty()messagebox

12、(你還沒有輸入密鑰!,null,mb_ok);return;cstring srcfilepath( ,200);m_srcfile.getwindowtext(srcfilepath);if(srcfilepath.isempty()messagebox(你還沒有選擇源文件,null,mb_ok);return;cfile srcfile;if(srcfile.open(lpctstr(srcfilepath),cfile:moderead)=0)messagebox(源文件打開失敗!,null,mb_ok);return;carchive srcar(&srcfile,carchive:l

13、oad);int filelen=srcfile.getlength();cstring detfilepath( ,200);m_detfile.getwindowtext(detfilepath);if(detfilepath.isempty()messagebox(你還沒有選擇目標文件,null,mb_ok);return;cfile detfile;if(detfile.open(lpctstr(detfilepath),cfile:modecreate|cfile:modewrite)=0)messagebox(目標文件打開失敗!,null,mb_ok);return;cstring

14、 len;len.format(%d,filelen);if(filelen100)int k=0,i=0;k=filelen/100;for(i=0;ik;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,k);messagebox(恭

15、喜您,加密成功!,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);cstring key1;key1.format(%s,key);if(key1.isempty()messagebox(你還沒有輸入密鑰!,null,mb_ok);return;cstring srcfilepath( ,200);m_srcfile1.getw

16、indowtext(srcfilepath);if(srcfilepath.isempty()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_detfi

17、le1.getwindowtext(detfilepath);if(detfilepath.isempty()messagebox(你還沒有選擇目標文件,null,mb_ok);return;cfile detfile;if(detfile.open(lpctstr(detfilepath),cfile:modecreate|cfile:modewrite)=0)messagebox(目標文件打開失敗!,null,mb_ok);return;cstring len;len.format(%d,filelen);if(filelen100)int k=0,i=0;k=filelen/100;fo

18、r(i=0;ik;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,k);messagebox(恭喜您,解密成功!,null,mb_ok);srcfile.close();detfile.close();界面設計:m_tab.insert

19、item(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(&rect); rect.top+=20; rect.bottom-=4; rect.left+=4; rect.right-=4; cpage0.movewindow(&rect); cpage1.movewindow(&rect); cp

20、age0.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: cpage0.showwindow(false); cpage1.showwindow(true); break; case 2: cpage0.showwindow(false); cpage1.showwindow(false); break; defaul

21、t: ; *presult = 0;五.總結(jié):提出問題:rc4加密后的的長度是 多少(例如md5的加密后的長度是固定的)? 用rc4加密后的字符串長度和原來的一樣嗎? 用rc4加密后的字符串中間會不會出現(xiàn)0? 用strlen得到的長度一定對嗎?解決問題:在一些場合,常需要用到一些簡單的加密算法,這里的rc4就可以說是最簡單的一種。只要設置一個足夠強的密碼,就可以適用于一些非常簡單的場合了。我是用來加密http傳送的數(shù)據(jù)的。 rc4函數(shù)(加密/解密) 其實,rc4只有加密,將密文再加密一次,就是解密了。 getkey函數(shù) 隨機字符串產(chǎn)生器,呵呵,為了方便,大多數(shù)加密算法都有一個隨機密碼產(chǎn)生器,我

22、也就附帶一個了。 bytetohex函數(shù) 把字節(jié)碼轉(zhuǎn)為十六進制碼,一個字節(jié)兩個十六進制。研究發(fā)現(xiàn),十六進制字符串非常適合在http中傳輸,base64中的某些字符會造成轉(zhuǎn)義,挺麻煩的。 hextobyte函數(shù) 把十六進制字符串,轉(zhuǎn)為字節(jié)碼。服務器也按照十六進制字符串的形式把數(shù)據(jù)傳回來,這里就可以解碼啦。同時,使用十六進制字符串傳輸,避開了傳輸過程中多國語言的問題。 encrypt函數(shù) 把字符串經(jīng)rc4加密后,再把密文轉(zhuǎn)為十六進制字符串返回,可直接用于傳輸。 decrypt函數(shù) 直接密碼十六進制字符串密文,再解密,返回字符串明文。六.心得體會:課程設計不僅是對已學知識的檢驗,更是對學生動手能力以及綜合能力的鍛煉。在我們小組組長的帶領下,以及通過全小組同學的共同努力,我們完成了課程設計的任務。在此期間,我們溫故了課堂上學過的知識,還有查找各種資料,對rc加密算法有了進一步的了解和掌握。平常學習的知識點,感覺已掌握,但是通過這次課程設計對自己學過的知識的檢閱,發(fā)現(xiàn)很多東西并不是想象的那么簡單,做起來的時候還是會因為粗心大意導致課程設計中出現(xiàn)很多小的錯誤。課程設計培養(yǎng)了自己的動手能力,對以前學習的知識起到了好的鞏固作用,并且對以后課程學習打下

溫馨提示

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

評論

0/150

提交評論