廣東工業(yè)大學網(wǎng)絡(luò)工程實驗報告_第1頁
廣東工業(yè)大學網(wǎng)絡(luò)工程實驗報告_第2頁
廣東工業(yè)大學網(wǎng)絡(luò)工程實驗報告_第3頁
廣東工業(yè)大學網(wǎng)絡(luò)工程實驗報告_第4頁
廣東工業(yè)大學網(wǎng)絡(luò)工程實驗報告_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗目的通過實際編程了解非對稱密碼算法RSA的加密和解密過程,加深對非對稱密碼算法的認識。實驗軟件環(huán)境運行Windows或Linux操作系統(tǒng)的PC機,具有g(shù)cc(Linux)、VC(Windows)等C語言編譯環(huán)境。實驗內(nèi)容為了加深對RSA算法的了解,根據(jù)已知參數(shù):p=3,q=11,M=2,手工計算公私鑰,并對明文進行加密,然后對密文進行解密。附件中給出了一個可以進行RSA加密和解密的對話框程序RSATool運行這個程序加密一段文字,了解RSA算法原理。嘗試著加密一大段文字,記錄程序的運行時間。使用DES算法加密相同的文字,比較兩種算法加密的速度。測試結(jié)果:四、實驗結(jié)果:(1)編寫一個程序,隨機選擇3個較大的數(shù)x、e、n,然后計算xemodn,記錄程序運行時間。實際中應(yīng)用的素數(shù)為512位,n也就為1024位。這樣的大數(shù)在計算機上如何表示、如何進行運算,查閱資料給出簡單說明。RSA依賴大數(shù)運算,目前主流RSA算法都建立在512位到1024位的大數(shù)運算之上,可是,大多數(shù)的編譯器只能支持到64位的整數(shù)運算,即我們在運算中所使用的整數(shù)必須小于等于64位,這遠遠達不到RSA的需要,于是需要專門建立大數(shù)運算庫來解決這一問題。另一種思路是將大數(shù)當作一個二進制流進行處理,使用各種移位和邏輯操作來進行加減乘除運算,但是這樣做代碼設(shè)計非常復雜,可讀性很低,難以理解也難以調(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è)大學實驗報告___ 學院網(wǎng)絡(luò)工程 專業(yè)_—__班學號 _姓名——___成績評定教師簽名 實驗_二題目__ 非對稱密碼算法RSA 課程名稱—絡(luò)安全與管理 X.Mov(X.Sub(Y));}if(X.Cmp(A)==0)X.Mov(0);returnX;}(2)計算機在生成一個隨機數(shù)時,并不一定就是素數(shù),因此要進行素性檢測。是否有確定的方法判定一個大數(shù)是素數(shù),要查閱資料,找出目前實際可行的素數(shù)判定法則,并且比較各自的優(yōu)缺點。所謂素數(shù),是指除了能被1和它本身整除而不能被其他任何數(shù)整除的數(shù)。①根據(jù)素數(shù)的定義,用2到N-1去除N,如果都除不盡則N是素數(shù)。flay=0,i=2.//flay為標志,其初值為0,只要有一個數(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是素數(shù)?!?;elsecout<<“不是素數(shù)”;}最壞的情形下,即N是素數(shù)時,算法1需要執(zhí)行N-2次除法,時間復雜性太大。費馬小定理,即如果P是一個素數(shù),且0<a<p,則aA(p-1)三1(modp)例如,67是一個素數(shù),則2A66mod67=1。利用費馬小定理,對于給定的整數(shù)n,可以設(shè)計一個素數(shù)判定算法。通過計算d=2A(n-1)modn來判定整數(shù)n的素性。當d不等于1時,n肯定不是素數(shù);當d等于1時,n則很可能是素數(shù)。但也存在合數(shù)n使得2A(n-1)三1(modn)。例如,滿足此條件的最小合數(shù)是n=341。為了提高測試的準確性,我們可以隨機地選取整數(shù)1費馬小定理畢竟只是素數(shù)判定的一個必要條件。滿足費馬小定理條件的整數(shù)n未必全是素數(shù)。有些合數(shù)也滿足費馬小定理的條件。這些和數(shù)被稱做Carmichael數(shù),前3個Carmichael數(shù)是561,1105,1729。Carmichael數(shù)是非常少的。在1?100000000范圍內(nèi)的整數(shù)中,只有255個Carmichael數(shù)。利用下面的二次探測定理可以對上面的素數(shù)判定算法作進一步改進,以避免將Carmichael數(shù)當作素數(shù)。二次探測定理,即如果p是一個素數(shù),0<x<p,則方程x'2=1(modp)的解為x=1,p-1下面是算法的步驟,n是我們要測試的數(shù)據(jù):0、先計算出m、j,使得n-1=m*2Aj,其中m是正奇數(shù),j是非負整數(shù)1、 隨機取一個b,2<=b2、 計算v=bAmmodn3、 如果v==1,通過測試,返回4、 令i=15、 如果v=n-1,通過測試,返回6、 如果i==j,非素數(shù),結(jié)束7、 v=vA2modn,i=i+18、 循環(huán)到5對于素數(shù)的判定還有別的方法,如用概率算法求素數(shù),但其理論太難,一般情況下很少用。⑶附件中給出了一個密碼算法庫,其中包括各種對稱加密算法、非對稱加密算法、Hash算法和數(shù)字簽名算法。找出其中關(guān)于RSA算法的部分,并且基于標準輸入輸出寫一段用RSA加密文件的程序。①程序核心代碼:#include<iostream>#include"mycrypt.h"usingnamespacestd;intmain(void)實驗_二題目__ 非對稱密碼算法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)實驗二題目非對稱密碼算法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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論