2015年南陽理工學院軟件學院網絡安全編程課程設計_第1頁
2015年南陽理工學院軟件學院網絡安全編程課程設計_第2頁
2015年南陽理工學院軟件學院網絡安全編程課程設計_第3頁
2015年南陽理工學院軟件學院網絡安全編程課程設計_第4頁
2015年南陽理工學院軟件學院網絡安全編程課程設計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本文僅限參考,如有抄襲,復制,切JJ一枚本文使用繁體編寫,如有需要請使用wps文檔繁體轉換成簡體閱讀 WPS文宇”Jt 2CH拜南陽理工學舷坪學尿謹向工程遽稈:酣詁址* - WP文豐A.貢面帝局引用審圜釀至冇去登錄G ;V*ABC團i: 口kj1LJ7L-FL_F 1插人雌艮劇丁”S拒超”a b上一蔡TSrv H R * -y Hh 了m 雄甫l口1 a-t- rlnr- * 負-4-網路安全編程姓名:秦密 班級:12級網安一班學號:1215135068一、設計任務與要求設計任務使用檔輸入流從指定路徑和名稱的磁片中讀取指定的txt文本,對文本內容加密後重新輸出到原文件中。設計要求能夠實現對tx

2、t文本的加密與解密操作,加密後的文本不應具有可讀性,解密後的文本以保持原有的大小、格式,不應有文本行或字元、字串的丟失。二、實現思想:1 .使用檔輸入輸出流:iofstream 從指定路徑的txt檔中讀取數據,使用檔輸入流的getline函數從原文件每次讀取一行作為一個字串寫入字串緩存空間szTmp中。2. 加密操作:3. 對緩存字串szTmp使用自定義的加密函數 AL_Lock進行加密操作,將加密後的字串寫入一個臨時檔 txtLocker.tmp中保存,待整個文本檔讀取並加密完成後,將加密後的檔從臨時檔txtLocker 中逐個字元複製回原文件中,並對將緩存檔清空。3. 解密操作:4. 使用

3、檔輸入輸出流逐行讀取加密後的檔,到字串緩存空間 szTmp中,對字串szTmp使用自定義的解密函數 LA_Key進行解 密操作,直到檔解密完成;解密操作完成後,將解密後的檔寫回原文 件中。4. 加密函數AL_Lock的實現思想:AL_Lock包含兩個自定義的加密函數 Line_Lock 和 Aph_Lock 。對字串進行加密時,有兩種基本的加密思想。其一是對字串中的各個字元按照一個給定的順序進行 換序加密 操作。女口:字串” abcdef ”字元序列” 326154 ”加密後為” cbfaed ” 此程式中自定義的加密函數 Line_Lock就是用於實現此功能。另一種加密思想是對字元序列進行邏

4、輯移位加密,加密數值增加 到字元的ASCII碼值中。如字元序列” abcde ”按字元序列” 11211 J 進行邏輯移位加密後字串為” bceef ”。此程式中自定義的加密函數Aph_Lock就是用於實現此功能。AL_Lock加密函數為這兩種加密思想結合使用構建的加密函 數,先使用邏輯移位加密函數 Aph_Lock進行加密,在使用換序加 密函數Line_Lock對其進行加密。5. 解密函數LA_Key的實現思想:解密函數為加密函數的逆過程,先使用解密函數Line_Key對加密後 的字串進行原來順序的恢復操作,再使用邏輯移位解密函數 Aph_Key對恢復原序的字串進行邏輯解密操作。6. 加密解

5、密序列的生成,給定任意一個字串序列如:” 7415369 ”按字元由小到大的順序逐個字元給定其對應位置產生字 串序列” 3524617 ”該序列即為換序加密時可用的加密序列使用 Line_Lock即可對字元加密。在此程式中用於生成加密序列的函數為 getNum。而產生的加密序列經字串數據轉換函數char2 int轉換後轉換為整型數據,利用除3取得的餘數作為邏輯移位的產生序列。*. .加密實現過程 新建檔123.txt文鋼H 輛舊 稻貳g 查若(V) m(H)美麗的世界:oxit?9de運行加密程式查看加密後的檔解密檔加密鑒解密Enter鍵確認 選擇| 2瀘輸入要加密文件的完整路徑名稱 如:d:

6、 l .txt完整路徑名稱為:d:123.txt1WA解密的密5手9562美麗的征界共1M四:程式源碼#i nclude stdafx.h #i ncludestdio.h#i ncludefstream#in clude using n amespace std;/檔輸入輸出流#defi ne ANuml 3000#defi ne ANum2 3500/ strLe n求字串求長函數 求任意長度字串的長度int strLe n( char str)int i = 0;while(stri+);retur n i;char2int 轉換,將字串數str,轉換為整型數,如:“ 123457-12

7、3457int char2 in t(char str)int Total = 0, i=0;int Tmp;while(stri)Tmp = stri+-48;Tmp用於存儲字串各個位元組處轉換後的的數字si-48,轉換前該位元組處用si表示 該數字字元Total = Total * 10 +Tmp;/將各位數字字合成字元所表示的數據return Total;/返回數字處理後得到的數字/strCopy字串拷貝函數,將字串從原始檔案str1拷貝到目標檔str2,返回值str2所對應的字串char * strCopy(char str2, const char str1)int i = 0;wh

8、ile(str1i) str2i = str1i+;str2i = 0;retur n str2;/strSort對字串內字元排序函數,對strl排序後存儲到str2中,strl保持不變,返回值str2char * strSort(char str1, char str2)/ 需包含strCopy、strLen兩個構造函數strCopy(str2, strl);char Tmp;for(i nt i=0; i strLe n(str2)-2; i+)for(i nt j=i+1; j str2j)Tmp = str2i;str2i = str2j;str2j = Tmp;retur n str

9、2;/getNum字串自動生成列序函數,根據輸入的字串大小數序依次取出對應的列號存放到 Num 數組中,如:getNum(95423, Num),可得列序 Num=4,5,3,2,1int * getNum(char str, int Num)/ 需包含strLen、strSort兩個構造函數文本加密時使用,使用此列序加 密文本int coun tk, countj;char TmpANum1;strSort( str, Tmp);/ 對 Tmp 裏的字元按從小到大排序for(i nt i=0; i strLe n(str)-1; i+)coun tj=0;for(i nt j=0; j st

10、rLe n(str)-1; j+)if(Tmpi = strj)/Tmp 中某一個字元與str中的某個字元相同時coun tj+;/countj用於計數str中第幾個字元與Tmpi相同,故每次i迴圈計數前時清為0Numi=j+1;int k=i;coun tk=1;while(Tmpk- = Tmpk-1) coun tk+;countk用於計數Tmp中多少個相同的字元,故每次計數前清為1if(countj=countk) j=strLen(str)-1;/ 當Tmp中第幾個相同的字元與str中第幾個相同的字元對應時退出迴 圈retur n Num;/strSort對字串內字元排序函數,對 s

11、tr1中字元按Num 裏給的字元順序進行排序en為Num數組的元素個數char * strSort(char str, int Num, int Len)/ 需包含strLen、strCopy兩個構造函數int j, i, CMi=strLen(str)-2;/ 因為在使用gets獲取一整行字串時最後一位是字元結尾0 ,倒數第二位是換行符也要排除在字元長度之外不能參與字元排序交換char TmpANum1;ANum1需給定for(i=0; i (CMi/Len)*Len; i+)/ 選取 str的Len的整數倍進行交換if(i%Le n=0) j=0;Tmpi = str(i/Le n)*Le

12、 n+(Numj+-1);for(i; i CMi+1; i+)/ 選取 str的Len的餘數部分原樣拷貝,多加一位將倒數第二位的換行符也拷 貝上if(i%Le n=0) j=0;Tmpi = stri;Tmpi=0;/ 為字串添加結尾strCopy(str, Tmp);retur n str;/getNum數組自動生成列序函數,根據輸入數組中數據的大小數序依次取出對應的列號存放到 Num數組中,如:getNum(1,5,4,2,3, Num),可得列序 Num=1,4,5,3,2/數組Num1中元素需從1開始連續(xù)且不相同,Len1為數組Num1 中元素個數int * getNum(int N

13、um1, int Num2, int Len1)/ 用於對給定的列序數組再次求列序,文本解密時使用,使用此列序還原 文本for(i nt i=0; iLe n1; i+)for(i nt j=0; jLe n1; j+)if(Num1j=i+1) Num2i=j+1;retur n Num2;/Line_Lock字串列序鎖函數,對str中的字元按key中字元密碼換序加密/key中存放任意字元密碼,對符合列排序大小關係的密碼均可解密 char * Line_Lock(char str, char key)/ 需包含函數兩參數的Get_Nu、三參數的strSortint keyTmpANum1;g

14、etNum(key, keyTmp);strSort(str, keyTmp, strLe n(key)-1);retur n str;/Line_Key字串列序匙函數,對str中的字元按key中字元密碼換序解密/key中存放任意字元密碼,對符合列排序大小關係的密碼均可解密 char * Line_Key(char str, char key)/ 需包含函數兩參數的getNum、三參數的getNum、三參數的strSortint keyTmp1ANum1, keyNTmpANum1;getNum(key, keyTmpl);getNum(keyTmp1, keyNTmp,strLe n( ke

15、y)-1);strSort(str, keyNTmp, strLe n(key)-1);retur n str;Aph_Lock字串字母鎖函數,對str中的字元按key中字元密碼邏輯移位加密/需包/key 中存放任意字元密碼char * Aph_Lock(char str, char key)含函數兩參數的strLenfor(i nt i=0; i=A & striZ) stri = t-26;/整數48,若加字元後大於Z則-26,使其依然屬於Aelse stri = t;if(stri=a & striz) stri = t-26;/字元O對應整數48,若加字元後大於z則-26,使其依然屬於

16、a zelse stri = t;if(stri=O) stri=9;if(stri 0) stri+=y;retur n str;Aph_key字串字母鎖函數,對str中的字元按key中字元密碼換序加密/key 中存放任意字元密碼char * Aph_Key(char str, char key)/ 需包含函數兩參數的strLenfor(i nt i=0; i=A & stri=Z)/ 判斷字元是否屬於A Z,是則有可能是大寫字母t= stri-(keyk+-47);if(t =a & stri=z)/ 判斷字元是否屬於a z,是則有可能是大寫字母t= stri-(keyk+-47);if(

17、t va) stri =t+26;/ 字元0對應整數48,若減字元後小於a則+26,使其依然屬於a zelse stri = t;if(stri=0) stri-=y;retur n str;AL_Lock字串列序鎖函數,對str中的字元按key中字元密碼換序加密/key中存放任意字元密碼,對符合列排序大小關係的密碼均可解密char * AL_Lock(char str, char key)/ 需包含函數 Aph_Lock、Line_LockAph_Lock(str, key);Lin e_Lock(str, key);retur n str;LA_Key字串列序鎖函數,對str中的字元按ke

18、y中字元密碼換序加密/key中存放任意字元密碼,對符合列排序大小關係的密碼均可解密char * LA_Key(char str, char key)/ 需包含函數 Aph_Lock、Line_LockLin e_Key(str, key);Aph_Key(str, key);retur n str;void mai n() int lable=1, Select, totalSize, li neNum;char tmp;char finame256;/ 定義輸入字串finame用於存放原始檔案的完整路徑和名稱charfoname256=C:WINDOWStemptxtLocker.tmp;/

19、 / 將檔處理的結果先緩存到textLocker.tmpchar szTmpANum1, keyANum1;ifstream fin;/( ifstream :in put file stream)定義一個檔輸入流對象fin ,從檔中輸入數據參見C+程式設計pag300ofstream fout;/ 定義一個檔輸出流對象fout,輸出數據到檔中doSelect=O; totalSize=0; lin eNum=O;docoutn-n;couttxt文本加密器,請選擇操作n;coutn1. 加密 2.解密Enter鍵確認;cout Select;while(Select!=1 & Select!

20、=2);docoutn請輸入要加密檔的完整路徑名稱n女口:d:1.txt;coutfin ame;fin .ope n(fin ame);/ 用檔輸入流打待處理檔finameif(!fin) coutvn要加密的檔打開失敗n;偌輸入的檔完整路徑名稱不正確則給出提示資訊while(!fin);/直到輸入的檔完整路徑名稱正確時繼續(xù)進行下麵的操作fout.open(foname);/ 用檔輸出流打開檔foname,沒有則創(chuàng)建,有則清空if(!fout) coutn系統盤空間可能不足,檔foname創(chuàng)建失敗n; retur n;if(Select=1) coutn 請輸入加密的密碼:;else if(

21、Select=2)cout key;if(Select=1)while(fin.getline(szTmp, ANum1-1, n)/ / 從待加密的檔中讀取一行,存儲到字串szTmp中,每行字串的最大長度為ANum1-1,讀取時每行僅讀到字元n停止,該字元不存到szTmp中l(wèi)in eNum+;AL_Lock(szTmp, key);szTmp用key進行加密foutvvszTmpvve ndl;的字串szTmp輸出到輸出檔foname中coutvvszTmpvve ndl;同時輸出至螢幕進行顯示totalSize += strLe n(szTmp);字串的字元數,計算檔的大小else if(Select=2)while(fi n.getli ne(szTmp, ANum1-1, n)lin eNum+;LA_Key(szTmp, key);szTmp用key進行解密foutvvszTmpvve ndl;的字串szTmp輸出到檔foname中coutvvszTmpvve ndl;/對字串/將加密後/寫入檔的/統計每個/對字串/將解密後t(yī)otalSize += strLe n(szTmp);coutn -n;if(Select=1) coutn文本加密完畢”;else if(Select=2)

溫馨提示

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

評論

0/150

提交評論