廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實(shí)驗(yàn)報(bào)告_第1頁(yè)
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實(shí)驗(yàn)報(bào)告_第2頁(yè)
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實(shí)驗(yàn)報(bào)告_第3頁(yè)
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實(shí)驗(yàn)報(bào)告_第4頁(yè)
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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)?zāi)康耐ㄟ^實(shí)際編程了解非對(duì)稱密碼算法RSA的加密和解密過程,加深對(duì)非對(duì)稱密碼算法的認(rèn)識(shí)。實(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)容為了加深對(duì)RSA算法的了解,根據(jù)已知參數(shù):p=3,q=11,M=2,手工計(jì)算公私鑰,并對(duì)明文進(jìn)行加密,然后對(duì)密文進(jìn)行解密。附件中給出了一個(gè)可以進(jìn)行RSA加密和解密的對(duì)話框程序RSATool運(yùn)行這個(gè)程序加密一段文字,了解RSA算法原理。嘗試著加密一大段文字,記錄程序的運(yùn)行時(shí)間。使用DES算法加密相同的文字,比較兩種算法加密的速度。測(cè)試結(jié)果:四、實(shí)驗(yàn)結(jié)果:(1)編寫一個(gè)程序,隨機(jī)選擇3個(gè)較大的數(shù)x、e、n,然后計(jì)算xemodn,記錄程序運(yùn)行時(shí)間。實(shí)際中應(yīng)用的素?cái)?shù)為512位,n也就為1024位。這樣的大數(shù)在計(jì)算機(jī)上如何表示、如何進(jìn)行運(yùn)算,查閱資料給出簡(jiǎn)單說明。RSA依賴大數(shù)運(yùn)算,目前主流RSA算法都建立在512位到1024位的大數(shù)運(yùn)算之上,可是,大多數(shù)的編譯器只能支持到64位的整數(shù)運(yùn)算,即我們?cè)谶\(yùn)算中所使用的整數(shù)必須小于等于64位,這遠(yuǎn)遠(yuǎn)達(dá)不到RSA的需要,于是需要專門建立大數(shù)運(yùn)算庫(kù)來解決這一問題。另一種思路是將大數(shù)當(dāng)作一個(gè)二進(jìn)制流進(jìn)行處理,使用各種移位和邏輯操作來進(jìn)行加減乘除運(yùn)算,但是這樣做代碼設(shè)計(jì)非常復(fù)雜,可讀性很低,難以理解也難以調(diào)試。調(diào)用程序〃大數(shù)求?!ㄕ{(diào)用形式:N.Mod(A),返回值:N%ACBigIntCBigInt::Mod(CBigInt&A){CBigIntX,Y;intlen;unsigned_int64num,div;unsignedlongcarry=0;X.Mov(*this);while(X.Cmp(A)>0){if(X.m_ulvalue[X.m_nLength-1]>A.m_ulvalue[A.m_nLength-1]){len=X.m_nLength-A.m_nLength;div=X.m_ulvalue[X.m_nLength-1]/(A.m_ulvalue[A.m_nLength-1]+1);}elseif(X.m_nLength>A.m_nLength){len=X.m_nLength-A.m_nLength-1;num=X.m_ulvalue[X.m_nLength-1];num=(num<<32)+X.m_ulvalue[X.m_nLength-2];if(A.m_ulvalue[A.m_nLength-1]==0xffffffff)div=(num>>32);elsediv=num/(A.m_ulvalue[A.m_nLength-1]+1);}else{Mov(X.Sub(A));break;}Y. Mov(div);Y.Mov(Y.Mul(A));Y.m_nLength+=len;for(inti=Y.m_nLength-1;i>=len;i--)Ym_ulvalue[i]=Ym_ulvalue[i-len];for(i=0;i<len;i++)Y.m_ulvalue[i]=0;廣東工業(yè)大學(xué)實(shí)驗(yàn)報(bào)告___ 學(xué)院網(wǎng)絡(luò)工程 專業(yè)_—__班學(xué)號(hào) _姓名——___成績(jī)?cè)u(píng)定教師簽名 實(shí)驗(yàn)_二題目__ 非對(duì)稱密碼算法RSA 課程名稱—絡(luò)安全與管理 X.Mov(X.Sub(Y));}if(X.Cmp(A)==0)X.Mov(0);returnX;}(2)計(jì)算機(jī)在生成一個(gè)隨機(jī)數(shù)時(shí),并不一定就是素?cái)?shù),因此要進(jìn)行素性檢測(cè)。是否有確定的方法判定一個(gè)大數(shù)是素?cái)?shù),要查閱資料,找出目前實(shí)際可行的素?cái)?shù)判定法則,并且比較各自的優(yōu)缺點(diǎn)。所謂素?cái)?shù),是指除了能被1和它本身整除而不能被其他任何數(shù)整除的數(shù)。①根據(jù)素?cái)?shù)的定義,用2到N-1去除N,如果都除不盡則N是素?cái)?shù)。flay=0,i=2.//flay為標(biāo)志,其初值為0,只要有一個(gè)數(shù)除盡,其值變?yōu)?.If(nmodi=0)flay=l;elsei=i+1; //nmodi是n除以i的余數(shù).If(flay=0andI<=n-1){If(nmodi=0)flay=l;elsei=i+1;}Else{If(flay=0)cout<<"n是素?cái)?shù)?!?;elsecout<<“不是素?cái)?shù)”;}最壞的情形下,即N是素?cái)?shù)時(shí),算法1需要執(zhí)行N-2次除法,時(shí)間復(fù)雜性太大。費(fèi)馬小定理,即如果P是一個(gè)素?cái)?shù),且0<a<p,則aA(p-1)三1(modp)例如,67是一個(gè)素?cái)?shù),則2A66mod67=1。利用費(fèi)馬小定理,對(duì)于給定的整數(shù)n,可以設(shè)計(jì)一個(gè)素?cái)?shù)判定算法。通過計(jì)算d=2A(n-1)modn來判定整數(shù)n的素性。當(dāng)d不等于1時(shí),n肯定不是素?cái)?shù);當(dāng)d等于1時(shí),n則很可能是素?cái)?shù)。但也存在合數(shù)n使得2A(n-1)三1(modn)。例如,滿足此條件的最小合數(shù)是n=341。為了提高測(cè)試的準(zhǔn)確性,我們可以隨機(jī)地選取整數(shù)1費(fèi)馬小定理畢竟只是素?cái)?shù)判定的一個(gè)必要條件。滿足費(fèi)馬小定理?xiàng)l件的整數(shù)n未必全是素?cái)?shù)。有些合數(shù)也滿足費(fèi)馬小定理的條件。這些和數(shù)被稱做Carmichael數(shù),前3個(gè)Carmichael數(shù)是561,1105,1729。Carmichael數(shù)是非常少的。在1?100000000范圍內(nèi)的整數(shù)中,只有255個(gè)Carmichael數(shù)。利用下面的二次探測(cè)定理可以對(duì)上面的素?cái)?shù)判定算法作進(jìn)一步改進(jìn),以避免將Carmichael數(shù)當(dāng)作素?cái)?shù)。二次探測(cè)定理,即如果p是一個(gè)素?cái)?shù),0<x<p,則方程x'2=1(modp)的解為x=1,p-1下面是算法的步驟,n是我們要測(cè)試的數(shù)據(jù):0、先計(jì)算出m、j,使得n-1=m*2Aj,其中m是正奇數(shù),j是非負(fù)整數(shù)1、 隨機(jī)取一個(gè)b,2<=b2、 計(jì)算v=bAmmodn3、 如果v==1,通過測(cè)試,返回4、 令i=15、 如果v=n-1,通過測(cè)試,返回6、 如果i==j,非素?cái)?shù),結(jié)束7、 v=vA2modn,i=i+18、 循環(huán)到5對(duì)于素?cái)?shù)的判定還有別的方法,如用概率算法求素?cái)?shù),但其理論太難,一般情況下很少用。⑶附件中給出了一個(gè)密碼算法庫(kù),其中包括各種對(duì)稱加密算法、非對(duì)稱加密算法、Hash算法和數(shù)字簽名算法。找出其中關(guān)于RSA算法的部分,并且基于標(biāo)準(zhǔn)輸入輸出寫一段用RSA加密文件的程序。①程序核心代碼:#include<iostream>#include"mycrypt.h"usingnamespacestd;intmain(void)實(shí)驗(yàn)_二題目__ 非對(duì)稱密碼算法RSA 課程名稱—絡(luò)安全與管理{interr,hash_idx,prng_idx,res;unsignedlong11,12;unsignedcharpt2[128],out[1024];rsa_keykey;if(register_prng(&sprng_desc)==-1){printf("Errorregisteringsprng");returnEXIT_FAILURE;}if(register_hash(&sha1_desc)==-1){printf("Errorregisteringsha1");returnEXIT_FAILURE;}hash_idx=find_hash("sha1");prng_idx=find_prng("sprng");if((err=rsa_make_key(NULL,/*PRNGstate*/prng_idx,/*PRNGidx*/1024/8,/*1024-bitkey*/65537,/*welikee=65537*/&key)/*wheretostorethekey*/)!=CRYPT_OK){printf("rsa_make_key%s",error_to_string(err));returnEXIT_FAILURE;}FILE*fd1;FILE*fd2;FILE*fd3;fd1=fopen("p1aintext1.txt”,"rb”);fd2=fopen("cipertext.txt","wb");intcount=0;unsignedcharp_buf[16];unsignedchartt[]="TestApp”;11=sizeof(out);while(true){count=fread(p_buf,sizeof(unsignedchar),16,fd1);for(intj=0;j<count;j++)cout<<p_buf[j];if((err=rsa_encrypt_key(p_buf,/*datawewishtoencrypt*/count,/*datais16byteslong*/out,/*wheretostoreciphertext*/&11,/*lengthofciphertext*/tt,/*ourlparamforthisprogram*/7,/*lparamis7byteslong*/NULL,/*PRNGstate*/prng_idx,/*pingidx*/hash_idx,/*Hashidx*/&key)/*ourRSAkey*/)!=CRYPT_OK){printf("rsa_encrypt_key%s",error_to_string(err));returnEXIT_FAILURE;}fwrite(out,sizeof(unsignedchar),11,fd2);if(count<16)break;count=0;}fclose(fd1);fclose(fd2);fd2=fopen("cipertext.txt","rb");fd3=fopen("p1aintext2.txt”,"wb”);unsignedcharc_buf[128];long13=sizeof(c_buf);while(true)實(shí)驗(yàn)二題目非對(duì)稱密碼算法RSA 課程名稱—絡(luò)安全與管理{count=fread(c_buf,sizeof(unsignedchar),128,fd2);if(count==0)break;l2=sizeof(pt2);if((err=rsa_decrypt_key(c_buf,/*encrypteddata*/l3,/*lengthofciphertext*/pt2,/*wheretoputplaintext*/&l2,/*plaintextlength*/tt,/*lparamforthisprogram*/7,/*lparamis7byteslong*/NULL,/*PRNGstate*/prng_idx,/*prngidx*/hash_idx,/*hashidx*/&res,/*validityofdata*/&key)/*ourRSAkey*/)!=CRYPT_OK){printf("err=rsa_decrypt_key%s",error_to_string(err));returnEXIT_fAiLURE;}for(intk=0;k<l2;k++)cout<<pt2[k];fwrite(pt2,sizeof(unsigned

溫馨提示

  • 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)論