2023年實驗報告密碼學_第1頁
2023年實驗報告密碼學_第2頁
2023年實驗報告密碼學_第3頁
2023年實驗報告密碼學_第4頁
2023年實驗報告密碼學_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

信息安全實驗報告學號:。學生姓名:班級:力實驗三密碼學實驗a[i*n+j]=d[i][j];)a[x*n+j+1]=,\0‘;puts(a);)voidbubble_sort(char*aJntn,int*b)(intijnTemp,k,x;charchange;charc[N];x=0;strepy(c,a);for(i=n-l,change=TRUE;i>=l&&change;--i)(change=FALSE;for(j=O;j<i;++j){if(a[j]>a[j+1]){nTemp=a[j];a[j]=aU+l];a[j+1]=nTemp;change=TRUE;i=0;while((c[i])!='\0'){for(k=0;k<n;k++){if((c[i])==a[k])(b[x]=k;printf("%d\t"^[x]);))i++;x++;)printf(M\n");Puts(a);}intmain()(intk;charnArr[N]/a[N];intb[N];clrscr();printf("Pleaseinputkey:\n");gets(nArr);k=Glength(nArr);printff'PleaseinputMword:\n");gets(a);printf("Thedataitemsinascendingorder:\n");bubbIe_sort(&nArr,k,&b);puts(nArr);encrypt(&a,k,&b);puts(a);printf("\n");return0;}加密結果為:Pleaseinputkey:cipherPleaseinputMword:attackbeginsatfiveThedataitemsinascendingorder:034215cehiprcehiprattack4attackhelloencryptbeginsalbeginsat0:five:five——aencrypt0encrypt0——sencrypt0-iencrypt3—tencrypt3一bencrypt3—encrypt3-uencrypt4—Iencrypt4-eencrypt4一aencrypt4--eencrypt2一aencrypt2-gencrypt2—tencrypt2—encrypt1——cencrypt1--iencrypt1—encrypt1—encrypt5acattkacattk5—kencrypt5——nencrypt5—fencryptigbenstigbenstafiueafiveA.二、公鑰加密算法一RSA一、實驗目的通過使用RSA算法對實驗數據進行加密和解密,掌握公鑰加密算法的基本原理,純熟掌握RSA算法各功能模塊的工作原理和具體運算過程。二、實驗原理RSA公鑰加密算法是1977年由RonRivest、AdiShamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密算法,它可以抵抗到FI前為止已知的所有密碼襲擊,已被ISO推薦為公鑰數據加密標準。RSA算法基于一個十分簡樸的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。RSA的密鑰生成RSA的算法涉及三個參數,n、e、d。其中,n是兩個大質數p、q的積,n的二進制表達時所占用的位數,就是所謂的密鑰長度。鑒于現代對于大整數分解的水平不斷增強,一般P、Q的取值都規定在1024位以上。e和d是一對相關的值,e可以任意取,但規定e與(p-1)*(q-1)互質;再選擇d,規定:(e*d)mod((p-1)*(q—1))=1。Vn,e>、<n,d>就是密鑰對。一般將前者當作公鑰,后者作為私鑰使用。RSA加密/解密過程RSA加解密和解密的算法完全相同,設A為明文,B為密文,則:A=B*emodn;B=A-dmodn;e和d可以互換使用,即:A=B八dmodn;B=A'emodn;三、實驗環境運營Windows或Linux操作系統的PC機,具有gcc(Linux)、VC(Windows)等C語言編譯環境。四、實驗內容和環節1.根據本講義提供的RSA程序,分析RSA算法的實現過程:(1)、運用:voidGenerateKey(RSA_Key&Pub1icKey,RSA_Key&PrivateKey,unsignedintiKoySizc)函數根據實際需要生成符合規定長度的公鑰和私鑰,大體環節如下:a)隨機生成兩個指定長度的大素數P,Qob)計算N=P*Q,以及N的歐拉函數4)(N)=(P-1)*(Q-1)Oc)隨機生成一個與6(N)互素的大整數E(公鑰)。d)根據公式ed三1(mod中(N)),運用函數multi_inverse(1,Big*,Big,Big*)計算出私鑰Do(2)、將某個大整數賦值給一個Big型變量M(明文)。(3)、調用函數powmod對明文M加密得到密文Co(4)、調用函數powmod(..,)對密文C解密得到明文Do(5)、比較M與D是否一致,判斷實驗結果是否對的。(6)、調換公鑰、私鑰后反復以上環節,驗證c、d的可互換性,并思考為什么可以這樣做。2.使用實例分析取11,q=13。一方面計算:n=pq=HX13=1434)(n)=(p-1)(q-l)=(l1-1)X(13-1)=120然后選擇。=17,滿足gcd(e,<t>(n))=gcd(17,120)=1,然后根據ed三1(mod小(N))計算d=113o則:公鑰:<17,143>、私鑰:<113,143>o設明文信息:m=24o對明文信息加密,得密文為:c三rrTe%N=24"17%143=7密文c通過公開信道發送到接受方后,接受方用私鑰d對密文進行解密:m=c-d%N=7A113%143=24從而對的地恢復出明文。五、思考題1、闡明RSA密鑰生成以及加密、解密流程(l)RSA密鑰生成:1)找出p,q,r三個數,p,q互質,r與(pT)(q-1)互質,p,q,r這三個數便是privatekey。o2)找出m,使得mr==lmod(p~l)(q—1)-3)計算n=pq,m,n這兩個數便是pub1ickey(2)流程:用戶A用B的公鑰對key進行加密,B收到消息后用自己的私鑰進行解密獲取key。2.使用提供的模塊編寫RSA加密程序對數據進行加密和解密,提交程序代碼和執行結果。程序代碼:include"time.h"inc1ude"big.h"inelude<iostream>defineBUFFERSIZE4096staticmiracl*mip=mirsys(BUFFERSIZE,0);structRSA_Key//密鑰結構體Bige;BigN;};intmain(void)(,voidGenerateKey(RSA_Key&PublicKey,RSA_Key&PrivaleKey,unsignedintiKeySize);//密鑰生成函數。RSA_KeyPublicKey:〃公鑰<e,N>RSA_KeyPrivateKey;〃私鑰<d,N>。BigM;//明文VBig<3;//密文?BigD;〃解密文DunsignedintiKeySize:std::coutV<"請輸入加密密鑰長度(單位比特)“<<std::cndl;ostd::cin?iKeySize;?std::cout<<"密鑰生成中"V<std::endl;GenerateKey(PublicKey,PrivateKey,iKeySize/4);〃產生iKeySizebit密鑰?std::coutV<”密鑰生成完畢“<<std::end1;。std::cou"請輸入明文:”〈Vstd::end1;std::cin>>std::hex?M:powmod(M.getbigO,PublicKey.e.getbigO,PublicKey.N.getbig(),C.getbig());//調用加密函數計算:C=(\「e)%Nostd::cout<<"RSA加密密文:"V<std::endl;0std::cout?std::hex<<C<<std::endl;。powmod(C.getbig0,PrivateKey.e.getbig()?PrivateKey.N.getbigO,D.getbig());//解密與加密使用同一函數,只是密鑰不同即:D=(C'd)%Nstd::cout<V"解密:"<<std::end1:std::cout?std::hex<<D<<std::endl:〃若D與M相同,可認為對的?systcm("Pause");。return0;)voidGencrateKey(RSA_Kcy&PublicKcy,RSAKey&PrivateKey,unsignedintiKcySize)(voidGcncratcPrime(Big*bigGcnPrime,intiLength,intiBasc);unsignedintInitRandom():unsignedintRAND_SEED=InitRandom();irand(RAND_SEED):mip->IOBASE=16;set_io_buffer_size(BUFFERSIZE);-BigE,D,P,Q,N,Z;oGeneratePrime(&P,iKeySizc/4,16)://生成強素數P,GeneratePrime(&Q,iKeySize/4,16):〃生成強素數Q。N=P*Q;〃計算NoZ=(P-1)*(Q7);〃計算N的歐拉函數odo(*GeneratePrime(&D,iKeySize/4,16);}whi1e(Z%D==0)"/反復生成素數,直到該素數與Z互素,得到密鑰DmuIti_inverse(l,&D,Z,&E);??//根據公式edmodz=1計算EPub1icKey.e=E;oPublicKey.N=N;。PrivateKey.e=D;,PrivaleKey.N=N;,return;)voidGeneratePrime(Big*bigGenPrime,intiLength,intiBase)(*bigGenPrime=4;。//任取非素數oset_io_buffer_size(50000);。whi1e(!isprime(bigGenPrime->getbig()))//若非素數則:bigdig(iLength,iBase,bigGenPrime->getbigO);//重新生成。return:)unsignedintInitRandom()//隨機數生成函數(_timc64_tlong_time:srand((unsigned)time(&long_time));unsignedintRAND_SEED=rand0:returnRANDSEED;)一、古典密碼算法實驗一、實驗目的通過編程實現替代密碼算法和置換密碼算法,加深對古典密碼體制的了解,為進一步學習密碼學奠定基礎。二、編譯環境運營windows或linux操作系統的PC機,具有gcc(linux)>VC(windows)等C語言編譯環境。三、實驗原理古典密碼算法歷史上曾被廣泛應用,大都比較簡樸,使用手工和機械操作來實現加密和解密。它的重要應用對象是文字信息,運用密碼算法實現文字信息的加密和解密。下面介紹兩種常見的具有代表性的古典密碼算法,以幫助讀者對密碼算法建立一個初步的印象。替代密碼替代密碼算法的原理是使用替代法進行加密,就是將明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d,用D、E、F、G做相應替換后形成密文。替代密碼涉及多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。下面我們介紹一種典型的單表替代密碼,愷撒(caesa「)密碼,乂叫循環移位密碼。它的加密方法,就是將明文中的每個字母用此字符在字母表中后面第k個字母替代。它的加密過程可以表達為下面的函數:E(m)=(m+k)modn其中:m為明文字母在字母表中的位置數;n為字母表中的字母個數;k為密鑰;E(m)為密文字母在字母表中相應的位置數。例如,對于明文字母H,其在字母表中的位置數為8,設k=4,則按照上式計算出來的密文為L:

E(8)=(m+k)modn=(8+4)mod26=12=L置換密碼置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實現明文信息的加密。置換密碼有時又稱為換位密碼。矩陣換位法是實現置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個矩陣中,然后用根據密鑰提供的順序重新組合矩陣中字母,從而形成密文。例如,明文為attackbeginsatfive,密鑰為cipher,將明attack文按照每行6文按照每行6列的形式排在矩陣中,形成如下形式:根據密鑰cipher中各字母在字母表中出現的先后順序,給定一個置換:123456145326根據上面的置換,將原有矩陣中的字母按照第1歹IJ,第4歹力第5歹力第3列,第2歹山第6列的順序排列,則有下面形式:aacttkbingesaIvfte從而得到密文:abatgftetcnvaiikse其解密的過程是根據密鑰的字母數作為列數,將密文按照列、行的順序寫出,再根據由密鑰給出的矩陣置換產生新的矩陣,從而恢復明文。四、實驗內容和環節1、根據實驗原理部分對替代密碼算法的介紹,自己創建明文信息,并選擇一個密鑰k,編寫替代密碼算法的實現程序,實現加密和解密操作。2、根據實驗原理部分對置換密碼算法的介紹,自己創建明文信息,并選擇一個密鑰,編寫置換密碼算法的實現程序,實現加密和解密操作。五、總結與思考記錄程序調試過程中出現的問題,分析其因素并找出解決方法。記錄最終實現的程序執行結果。思考采用什么樣的手段來防范類似對網絡的襲擊。六、實驗結果替換密碼的加密解密先是加密實現程序為:#inelude"stdio.h"#inelude"conio.h"main()(intkJ=O;chara[100],b[100]={0};;printf(np1easeinputyourmingwen:\n");gets(a);printf("p1easeinputmishi\n");seanf("%d*'z&k);printf("\n");do{b[i]=(char)(a[i]+k);if(b[i]>122){b[i]=(char)(b[i]-26);i++;}while(a[i]!='\0');puts(b);getch();}實驗結果為::產"\奎一學實險\Debuf'k".e?e"pleaseinputyourningwen:Mbcdxyzxpleaseinputnishifghicdecbd再是解密:實現程序為:#inelude"stdio.h"#include"conio.h"main()intk,i=O;chara[100],b[100];printf("pleaseinputmiwen:\n");gets(a);printff'pleaseinputmishi:\n");scanf("%d",&k);printf("\n");do{b[i]=(char)(a[i]-k);if(b[i]<97){b[i]=(char)(b[i]+26);不知道三哪里的問題結果中的Y輸不出來)i++;}while(a[i]!=/\O');puts(b);getch();P結果為:cl"D:\密碼學實驗\Debug\key.exe”pleaseinputniwen:fghicd

溫馨提示

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

評論

0/150

提交評論