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

下載本文檔

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

文檔簡(jiǎn)介

./信息安全實(shí)驗(yàn)報(bào)告學(xué)號(hào):學(xué)生:班級(jí):實(shí)驗(yàn)三密碼學(xué)實(shí)驗(yàn)一、古典密碼算法實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康耐ㄟ^編程實(shí)現(xiàn)替代密碼算法和置換密碼算法,加深對(duì)古典密碼體制的了解,為深入學(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)用,大都比較簡(jiǎn)單,使用手工和機(jī)械操作來實(shí)現(xiàn)加密和解密。它的主要應(yīng)用對(duì)象是文字信息,利用密碼算法實(shí)現(xiàn)文字信息的加密和解密。下面介紹兩種常見的具有代表性的古典密碼算法,以幫助讀者對(duì)密碼算法建立一個(gè)初步的印象。1.替代密碼替代密碼算法的原理是使用替代法進(jìn)行加密,就是將明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d,用D、E、F、G做對(duì)應(yīng)替換后形成密文。替代密碼包括多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。下面我們介紹一種典型的單表替代密碼,愷撒<caesar>密碼,又叫循環(huán)移位密碼。它的加密方法,就是將明文中的每個(gè)字母用此字符在字母表中后面第k個(gè)字母替代。它的加密過程可以表示為下面的函數(shù):E<m>=<m+k>modn其中:m為明文字母在字母表中的位置數(shù);n為字母表中的字母?jìng)€(gè)數(shù);k為密鑰;E<m>為密文字母在字母表中對(duì)應(yīng)的位置數(shù)。例如,對(duì)于明文字母H,其在字母表中的位置數(shù)為8,設(shè)k=4,則按照上式計(jì)算出來的密文為L(zhǎng):E<8>=<m+k>modn=<8+4>mod26=12=L2.置換密碼置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實(shí)現(xiàn)明文信息的加密。置換密碼有時(shí)又稱為換位密碼。矩陣換位法是實(shí)現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個(gè)矩陣中,然后用根據(jù)密鑰提供的順序重新組合矩陣中字母,從而形成密文。例如,明文為attackbeginsatfive,密鑰為cipher,將明文按照每行6列的形式排在矩陣中,形成如下形式:attackbeginsatfive根據(jù)密鑰cipher中各字母在字母表中出現(xiàn)的先后順序,給定一個(gè)置換:123456f=145326根據(jù)上面的置換,將原有矩陣中的字母按照第1列,第4列,第5列,第3列,第2列,第6列的順序排列,則有下面形式:aacttkbingesaIvfte從而得到密文:abatgftetcnvaiikse其解密的過程是根據(jù)密鑰的字母數(shù)作為列數(shù),將密文按照列、行的順序?qū)懗?再根據(jù)由密鑰給出的矩陣置換產(chǎn)生新的矩陣,從而恢復(fù)明文。實(shí)驗(yàn)容和步驟1、根據(jù)實(shí)驗(yàn)原理部分對(duì)替代密碼算法的介紹,自己創(chuàng)建明文信息,并選擇一個(gè)密鑰k,編寫替代密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作。2、根據(jù)實(shí)驗(yàn)原理部分對(duì)置換密碼算法的介紹,自己創(chuàng)建明文信息,并選擇一個(gè)密鑰,編寫置換密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作??偨Y(jié)與思考記錄程序調(diào)試過程中出現(xiàn)的問題,分析其原因并找出解決方法。記錄最終實(shí)現(xiàn)的程序執(zhí)行結(jié)果。思考采取什么樣的手段來防類似對(duì)網(wǎng)絡(luò)的攻擊。實(shí)驗(yàn)結(jié)果替換密碼的加密解密先是加密實(shí)現(xiàn)程序?yàn)?#include"stdio.h"#include"conio.h"main<>{intk,i=0;chara[100],b[100]={0};;printf<"pleaseinputyourmingwen:\n">;gets<a>;printf<"pleaseinputmishi\n">;scanf<"%d",&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é)果為:再是解密:實(shí)現(xiàn)程序?yàn)椋?include"stdio.h"#include"conio.h"main<>{intk,i=0;chara[100],b[100];printf<"pleaseinputmiwen:\n">;gets<a>;printf<"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]!='\0'>;puts<b>;getch<>;}結(jié)果為:置換密碼先是加密實(shí)現(xiàn)程序#include<stdio.h>#defineTRUE1#defineFALSE0#defineN1000#defineM50intGlength<char*a>{char*pt;intnlen=0;pt=a;while<<*pt>!='\0'>{nlen++;pt++;}returnnlen;}voidencrypt<char*a,intn,int*b>{inti,j,k,t,x,y;charc[M][M],d[M][M];k=Glength<a>;puts<a>;t=k%n;if<t==0>{x=k/n;}else{x=<k/n>+1;}printf<"%d\n",x>;for<i=0;i<x;i++>{for<j=0;j<n;j++>{if<<<a[i*n+j]>>96>&&<a[i*n+j]<123>>{c[i][j]=a[i*n+j];printf<"%c",c[i][j]>;}else{c[i][j]='';printf<"%c",c[i][j]>;}}}printf<"\nhehe\n">;for<j=0;j<n;j++>{for<i=0;i<x;i++>{y=b[j];printf<"encrypt%d\t",y>;d[i][y]=c[i][j];printf<"--%c\t",d[i][y]>;}}printf<"\n">;for<i=0;i<x;i++>{for<j=0;j<n;j++>{a[i*n+j]=d[i][j];}}a[x*n+j+1]='\0';puts<a>;}voidbubble_sort<char*a,intn,int*b>{inti,j,nTemp,k,x;charchange;charc[N];x=0;strcpy<c,a>;for<i=n-1,change=TRUE;i>=1&&change;--i>{change=FALSE;for<j=0;j<i;++j>{if<a[j]>a[j+1]>{nTemp=a[j];a[j]=a[j+1];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",b[x]>;}}i++;x++;}printf<"\n">;puts<a>;}intmain<>{intk;charnArr[N],a[N];intb[N];clrscr<>;printf<"Pleaseinputkey:\n">;gets<nArr>;k=Glength<nArr>;printf<"PleaseinputMword:\n">;gets<a>;printf<"Thedataitemsinascendingorder:\n">;bubble_sort<&nArr,k,&b>;puts<nArr>;encrypt<&a,k,&b>;puts<a>;printf<"\n">;return0;}加密結(jié)果為:二、公鑰加密算法—RSA一、實(shí)驗(yàn)?zāi)康耐ㄟ^使用RSA算法對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行加密和解密,掌握公鑰加密算法的基本原理,熟練掌握RSA算法各功能模塊的工作原理和具體運(yùn)算過程。二、實(shí)驗(yàn)原理RSA公鑰加密算法是1977年由RonRivest、AdiShamirh和LenAdleman在〔美國(guó)麻省理工學(xué)院開發(fā)的。RSA取名來自開發(fā)他們?nèi)叩拿?。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。1.RSA的密鑰生成RSA的算法涉及三個(gè)參數(shù),n、e、d。其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時(shí)所占用的位數(shù),就是所謂的密鑰長(zhǎng)度。鑒于現(xiàn)代對(duì)于大整數(shù)分解的水平不斷增強(qiáng),一般P、Q的取值都要求在1024位以上。e和d是一對(duì)相關(guān)的值,e可以任意取,但要求e與<p-1>*<q-1>互質(zhì);再選擇d,要求:<e*d>mod<<p-1>*<q-1>>=1。<n,e>、<n,d>就是密鑰對(duì)。一般將前者當(dāng)作公鑰,后者作為私鑰使用。2.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)容和步驟1.根據(jù)本講義提供的RSA程序,分析RSA算法的實(shí)現(xiàn)過程:<1>、利用:voidGenerateKey<RSA_Key&PublicKey,RSA_Key&PrivateKey,unsignedintiKeySize>函數(shù)根據(jù)實(shí)際需要生成符合要求長(zhǎng)度的公鑰和私鑰,大致步驟如下:a>隨機(jī)生成兩個(gè)指定長(zhǎng)度的大素?cái)?shù)P,Q。b>計(jì)算N=P*Q,以及N的歐拉函數(shù)φ<N>=<P-1>*<Q-1>。c>隨機(jī)生成一個(gè)與φ<N>互素的大整數(shù)E〔公鑰。d>根據(jù)公式ed≡1<modΦ<N>>,利用函數(shù)multi_inverse<1,Big*,Big,Big*>計(jì)算出私鑰D?!?、將某個(gè)大整數(shù)賦值給一個(gè)Big型變量M〔明文。〔3、調(diào)用函數(shù)powmod<..,..,..,..>對(duì)明文M加密得到密文C。〔4、調(diào)用函數(shù)powmod<..,..,..,..>對(duì)密文C解密得到明文D?!?、比較M與D是否一致,判斷實(shí)驗(yàn)結(jié)果是否正確?!?、調(diào)換公鑰、私鑰后重復(fù)以上步驟,驗(yàn)證e、d的可互換性,并思考為什么可以這樣做。2.使用實(shí)例分析取p=11,q=13。首先計(jì)算:n=pq=11×13=143φ<n>=<p-1><q-1>=<11-1>×<13-1>=120然后選擇e=17,滿足gcd<e,φ<n>>=gcd<17,120>=1,然后根據(jù)ed≡1<modφ<N>>計(jì)算d=113。則:公鑰:<17,143>、私鑰:<113,143>。設(shè)明文信息:m=24。對(duì)明文信息加密,得密文為:c≡m^e%N=24^17%143=7密文c經(jīng)過公開信道發(fā)送到接收方后,接收方用私鑰d對(duì)密文進(jìn)行解密:m≡c^d%N=7^113%143=24從而正確地恢復(fù)出明文。五、思考題1、闡明RSA密鑰生成以及加密、解密流程<1>RSA密鑰生成:1>找出p,q,r三個(gè)數(shù),p,q互質(zhì),r與<p-1><q-1>互質(zhì),p,q,r這三個(gè)數(shù)便是privatekey。 2>找出m,使得mr==1mod<p-1><q-1> 3>計(jì)算n=pq,m,n這兩個(gè)數(shù)便是publickey<2>流程:用戶A用B的公鑰對(duì)key進(jìn)行加密,B收到消息后用自己的私鑰進(jìn)行解密獲取key。2.使用提供的模塊編寫RSA加密程序?qū)?shù)據(jù)進(jìn)行加密和解密,提交程序代碼和執(zhí)行結(jié)果。程序代碼:#include"time.h"#include"big.h"#include<iostream>#defineBUFFERSIZE4096staticmiracl*mip=mirsys<BUFFERSIZE,0>;structRSA_Key//密鑰結(jié)構(gòu)體{ Bige; BigN;};intmain<void>{voidGenerateKey<RSA_Key&PublicKey,RSA_Key&PrivateKey,unsignedintiKeySize>;//密鑰生成函數(shù) RSA_KeyPublicKey;//公鑰<e,N> RSA_KeyPrivateKey;//私鑰<d,N> BigM;//明文M BigC;//密文C BigD;//解密文DunsignedintiKeySize; std::cout<<"請(qǐng)輸入加密密鑰長(zhǎng)度<單位比特>"<<std::endl; std::cin>>iKeySize; std::cout<<"密鑰生成中"<<std::endl; GenerateKey<PublicKey,PrivateKey,iKeySize/4>;//產(chǎn)生iKeySizebit密鑰 std::cout<<"密鑰生成完畢"<<std::endl; std::cout<<"請(qǐng)輸入明文:"<<std::endl; std::cin>>std::hex>>M; powmod<M.getbig<>,PublicKey.e.getbig<>,PublicKey.N.getbig<>,C.getbig<>>;//調(diào)用加密函數(shù)計(jì)算:C=<M^e>%N std::cout<<"RSA加密密文:"<<std::endl; std::cout<<std::hex<<C<<std::endl; powmod<C.getbig<>,PrivateKey.e.getbig<>,PrivateKey.N.getbig<>,D.getbig<>>;//解密與加密使用同一函數(shù),只是密鑰不同即:D=<C^d>%N std::cout<<"解密:"<<std::endl; std::cout<<std::hex<<D<<std::endl;//若D與M相同,可認(rèn)為正確 system<"Pause">;return0;}voidGenerateKey<RSA_Key&PublicKey,RSA_Key&PrivateKey,unsignedintiKeySize>{voidGeneratePrime<Big*bigGenPrime,intiLength,intiBase>;unsignedintInitRandom<>;unsignedintRAND_SEED=InitRandom

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論