2023年實(shí)驗(yàn)報(bào)告密碼學(xué)_第1頁
2023年實(shí)驗(yàn)報(bào)告密碼學(xué)_第2頁
2023年實(shí)驗(yàn)報(bào)告密碼學(xué)_第3頁
2023年實(shí)驗(yàn)報(bào)告密碼學(xué)_第4頁
2023年實(shí)驗(yàn)報(bào)告密碼學(xué)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

信息安全實(shí)驗(yàn)報(bào)告學(xué)號:。學(xué)生姓名:班級:力實(shí)驗(yàn)三密碼學(xué)實(shí)驗(yàn)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;}加密結(jié)果為: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一、實(shí)驗(yàn)?zāi)康耐ㄟ^使用RSA算法對實(shí)驗(yàn)數(shù)據(jù)進(jìn)行加密和解密,掌握公鑰加密算法的基本原理,純熟掌握RSA算法各功能模塊的工作原理和具體運(yùn)算過程。二、實(shí)驗(yàn)原理RSA公鑰加密算法是1977年由RonRivest、AdiShamirh和LenAdleman在(美國麻省理工學(xué)院)開發(fā)的。RSA取名來自開發(fā)他們?nèi)叩拿?。RSA是目前最有影響力的公鑰加密算法,它可以抵抗到FI前為止已知的所有密碼襲擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個(gè)十分簡樸的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。RSA的密鑰生成RSA的算法涉及三個(gè)參數(shù),n、e、d。其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表達(dá)時(shí)所占用的位數(shù),就是所謂的密鑰長度。鑒于現(xiàn)代對于大整數(shù)分解的水平不斷增強(qiáng),一般P、Q的取值都規(guī)定在1024位以上。e和d是一對相關(guān)的值,e可以任意取,但規(guī)定e與(p-1)*(q-1)互質(zhì);再選擇d,規(guī)定:(e*d)mod((p-1)*(q—1))=1。Vn,e>、<n,d>就是密鑰對。一般將前者當(dāng)作公鑰,后者作為私鑰使用。RSA加密/解密過程RSA加解密和解密的算法完全相同,設(shè)A為明文,B為密文,則:A=B*emodn;B=A-dmodn;e和d可以互換使用,即:A=B八dmodn;B=A'emodn;三、實(shí)驗(yàn)環(huán)境運(yùn)營Windows或Linux操作系統(tǒng)的PC機(jī),具有g(shù)cc(Linux)、VC(Windows)等C語言編譯環(huán)境。四、實(shí)驗(yàn)內(nèi)容和環(huán)節(jié)1.根據(jù)本講義提供的RSA程序,分析RSA算法的實(shí)現(xiàn)過程:(1)、運(yùn)用:voidGenerateKey(RSA_Key&Pub1icKey,RSA_Key&PrivateKey,unsignedintiKoySizc)函數(shù)根據(jù)實(shí)際需要生成符合規(guī)定長度的公鑰和私鑰,大體環(huán)節(jié)如下:a)隨機(jī)生成兩個(gè)指定長度的大素?cái)?shù)P,Qob)計(jì)算N=P*Q,以及N的歐拉函數(shù)4)(N)=(P-1)*(Q-1)Oc)隨機(jī)生成一個(gè)與6(N)互素的大整數(shù)E(公鑰)。d)根據(jù)公式ed三1(mod中(N)),運(yùn)用函數(shù)multi_inverse(1,Big*,Big,Big*)計(jì)算出私鑰Do(2)、將某個(gè)大整數(shù)賦值給一個(gè)Big型變量M(明文)。(3)、調(diào)用函數(shù)powmod對明文M加密得到密文Co(4)、調(diào)用函數(shù)powmod(..,)對密文C解密得到明文Do(5)、比較M與D是否一致,判斷實(shí)驗(yàn)結(jié)果是否對的。(6)、調(diào)換公鑰、私鑰后反復(fù)以上環(huán)節(jié),驗(yàn)證c、d的可互換性,并思考為什么可以這樣做。2.使用實(shí)例分析取11,q=13。一方面計(jì)算:n=pq=HX13=1434)(n)=(p-1)(q-l)=(l1-1)X(13-1)=120然后選擇。=17,滿足gcd(e,<t>(n))=gcd(17,120)=1,然后根據(jù)ed三1(mod小(N))計(jì)算d=113o則:公鑰:<17,143>、私鑰:<113,143>o設(shè)明文信息:m=24o對明文信息加密,得密文為:c三rrTe%N=24"17%143=7密文c通過公開信道發(fā)送到接受方后,接受方用私鑰d對密文進(jìn)行解密:m=c-d%N=7A113%143=24從而對的地恢復(fù)出明文。五、思考題1、闡明RSA密鑰生成以及加密、解密流程(l)RSA密鑰生成:1)找出p,q,r三個(gè)數(shù),p,q互質(zhì),r與(pT)(q-1)互質(zhì),p,q,r這三個(gè)數(shù)便是privatekey。o2)找出m,使得mr==lmod(p~l)(q—1)-3)計(jì)算n=pq,m,n這兩個(gè)數(shù)便是pub1ickey(2)流程:用戶A用B的公鑰對key進(jìn)行加密,B收到消息后用自己的私鑰進(jìn)行解密獲取key。2.使用提供的模塊編寫RSA加密程序?qū)?shù)據(jù)進(jìn)行加密和解密,提交程序代碼和執(zhí)行結(jié)果。程序代碼:include"time.h"inc1ude"big.h"inelude<iostream>defineBUFFERSIZE4096staticmiracl*mip=mirsys(BUFFERSIZE,0);structRSA_Key//密鑰結(jié)構(gòu)體Bige;BigN;};intmain(void)(,voidGenerateKey(RSA_Key&PublicKey,RSA_Key&PrivaleKey,unsignedintiKeySize);//密鑰生成函數(shù)。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);〃產(chǎn)生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());//調(diào)用加密函數(shù)計(jì)算: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());//解密與加密使用同一函數(shù),只是密鑰不同即:D=(C'd)%Nstd::cout<V"解密:"<<std::end1:std::cout?std::hex<<D<<std::endl:〃若D與M相同,可認(rèn)為對的?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)://生成強(qiáng)素?cái)?shù)P,GeneratePrime(&Q,iKeySize/4,16):〃生成強(qiáng)素?cái)?shù)Q。N=P*Q;〃計(jì)算NoZ=(P-1)*(Q7);〃計(jì)算N的歐拉函數(shù)odo(*GeneratePrime(&D,iKeySize/4,16);}whi1e(Z%D==0)"/反復(fù)生成素?cái)?shù),直到該素?cái)?shù)與Z互素,得到密鑰DmuIti_inverse(l,&D,Z,&E);??//根據(jù)公式edmodz=1計(jì)算EPub1icKey.e=E;oPublicKey.N=N;。PrivateKey.e=D;,PrivaleKey.N=N;,return;)voidGeneratePrime(Big*bigGenPrime,intiLength,intiBase)(*bigGenPrime=4;。//任取非素?cái)?shù)oset_io_buffer_size(50000);。whi1e(!isprime(bigGenPrime->getbig()))//若非素?cái)?shù)則:bigdig(iLength,iBase,bigGenPrime->getbigO);//重新生成。return:)unsignedintInitRandom()//隨機(jī)數(shù)生成函數(shù)(_timc64_tlong_time:srand((unsigned)time(&long_time));unsignedintRAND_SEED=rand0:returnRANDSEED;)一、古典密碼算法實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康耐ㄟ^編程實(shí)現(xiàn)替代密碼算法和置換密碼算法,加深對古典密碼體制的了解,為進(jìn)一步學(xué)習(xí)密碼學(xué)奠定基礎(chǔ)。二、編譯環(huán)境運(yùn)營windows或linux操作系統(tǒng)的PC機(jī),具有g(shù)cc(linux)>VC(windows)等C語言編譯環(huán)境。三、實(shí)驗(yàn)原理古典密碼算法歷史上曾被廣泛應(yīng)用,大都比較簡樸,使用手工和機(jī)械操作來實(shí)現(xiàn)加密和解密。它的重要應(yīng)用對象是文字信息,運(yùn)用密碼算法實(shí)現(xiàn)文字信息的加密和解密。下面介紹兩種常見的具有代表性的古典密碼算法,以幫助讀者對密碼算法建立一個(gè)初步的印象。替代密碼替代密碼算法的原理是使用替代法進(jìn)行加密,就是將明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d,用D、E、F、G做相應(yīng)替換后形成密文。替代密碼涉及多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。下面我們介紹一種典型的單表替代密碼,愷撒(caesa「)密碼,乂叫循環(huán)移位密碼。它的加密方法,就是將明文中的每個(gè)字母用此字符在字母表中后面第k個(gè)字母替代。它的加密過程可以表達(dá)為下面的函數(shù):E(m)=(m+k)modn其中:m為明文字母在字母表中的位置數(shù);n為字母表中的字母個(gè)數(shù);k為密鑰;E(m)為密文字母在字母表中相應(yīng)的位置數(shù)。例如,對于明文字母H,其在字母表中的位置數(shù)為8,設(shè)k=4,則按照上式計(jì)算出來的密文為L:

E(8)=(m+k)modn=(8+4)mod26=12=L置換密碼置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實(shí)現(xiàn)明文信息的加密。置換密碼有時(shí)又稱為換位密碼。矩陣換位法是實(shí)現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個(gè)矩陣中,然后用根據(jù)密鑰提供的順序重新組合矩陣中字母,從而形成密文。例如,明文為attackbeginsatfive,密鑰為cipher,將明attack文按照每行6文按照每行6列的形式排在矩陣中,形成如下形式:根據(jù)密鑰cipher中各字母在字母表中出現(xiàn)的先后順序,給定一個(gè)置換:123456145326根據(jù)上面的置換,將原有矩陣中的字母按照第1歹IJ,第4歹力第5歹力第3列,第2歹山第6列的順序排列,則有下面形式:aacttkbingesaIvfte從而得到密文:abatgftetcnvaiikse其解密的過程是根據(jù)密鑰的字母數(shù)作為列數(shù),將密文按照列、行的順序?qū)懗觯俑鶕?jù)由密鑰給出的矩陣置換產(chǎn)生新的矩陣,從而恢復(fù)明文。四、實(shí)驗(yàn)內(nèi)容和環(huán)節(jié)1、根據(jù)實(shí)驗(yàn)原理部分對替代密碼算法的介紹,自己創(chuàng)建明文信息,并選擇一個(gè)密鑰k,編寫替代密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作。2、根據(jù)實(shí)驗(yàn)原理部分對置換密碼算法的介紹,自己創(chuàng)建明文信息,并選擇一個(gè)密鑰,編寫置換密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作。五、總結(jié)與思考記錄程序調(diào)試過程中出現(xiàn)的問題,分析其因素并找出解決方法。記錄最終實(shí)現(xiàn)的程序執(zhí)行結(jié)果。思考采用什么樣的手段來防范類似對網(wǎng)絡(luò)的襲擊。六、實(shí)驗(yàn)結(jié)果替換密碼的加密解密先是加密實(shí)現(xiàn)程序?yàn)椋?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();}實(shí)驗(yàn)結(jié)果為::產(chǎn)"\奎一學(xué)實(shí)險(xiǎn)\Debuf'k".e?e"pleaseinputyourningwen:Mbcdxyzxpleaseinputnishifghicdecbd再是解密:實(shí)現(xiàn)程序?yàn)?#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);不知道三哪里的問題結(jié)果中的Y輸不出來)i++;}while(a[i]!=/\O');puts(b);getch();P結(jié)果為:cl"D:\密碼學(xué)實(shí)驗(yàn)\Debug\key.exe”pleaseinputniwen:fghicd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論