資源描述:
《實驗四RSA加解密算法的實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實驗四RSA加解密算法的實現(xiàn)一.實驗?zāi)康?、對算法描述可進(jìn)行充分理解,精確理解算法的各個步驟。2、完成RSA軟件算法的詳細(xì)設(shè)計。3、用C++完成算法的設(shè)計模塊。4、編制測試代碼。二?實驗內(nèi)容1?實驗原理及基本技術(shù)路線圖(方框原理圖)加密過程:第一步,用八首先輸入兩個素數(shù)P和q,并求出n二P*q,然后再求出n的歐拉函數(shù)值phi。第二步,在[e,phi]中選出一個與phi互素的整數(shù)e,并根據(jù)e*d=1(modphi),求出e的乘法逆元。至此我們已經(jīng)得到了公開密鑰{e,n}和秘密密鑰{d,n}o第三步,讓用戶輸入耍進(jìn)行加密的小于n-?
2、組正整數(shù)(個數(shù)不超過MXLENGTH二500),輸入以-1為結(jié)束標(biāo)志,實際個數(shù)存入size中,正整數(shù)以clea譏MAXLENGTH]保存。第四步,對第三步所得的明文c1ear[MAXLENGTH]進(jìn)行加密。遍歷clear[size],對每一個整數(shù)用以下算法進(jìn)行加密,并將加密后的密文保存在Ciphertext[MAXLENGTH]中。count=e;while(count>0)對明文進(jìn)行加密Ciphertext=(clear)亠emodnCiphertext[j]=(Ciphertext[j]*clear[j])%n;count一
3、一;}注意:此處不能用m2[j]=cleartj]*e整數(shù)的幕,因為當(dāng)e和cleartj]較大時,會發(fā)生溢出,至使出現(xiàn)無法預(yù)料的結(jié)果。第五步,輸出加密后的密文。解密過程:第一步,根據(jù)在以上算法中求出的解密密鑰[d,phi],對加密后的密文Ciphertext[MAXLENGTH]進(jìn)行解密,結(jié)果保存在DecryptionText[MAXLENGTH]中,算法如下:intcount;for(intj=0;j0)對密文進(jìn)行解密DecryptionText=(Ciphertex
4、t)八d(modn)DecryptionText[j]=((DecryptionText[j]*Ciphertext[j])%n);count--;>>第二步,輸出對加密前的明文和加密并解密后的密文進(jìn)行比較,判斷兩個數(shù)組是否一致,從而得知算法是否正確。2?所用儀器.材料(設(shè)備名稱.型號.規(guī)格等)計算機(jī)一臺、vc6.03.實驗方法.#includeusingnamespacestd;^defineMAXLENGTH500//明文最人長度,即所允許最人整數(shù)個數(shù)intsize=0;//
5、保存要進(jìn)彳亍加密的正整數(shù)的個數(shù)intp,q;〃兩個大素數(shù)intn,phi;//n二p*q,phi=(p-1)*(qT)是n的歐拉函數(shù)值inte;//{e,n}為公開密鑰intd;//{d,n}為秘密密鑰intclear[MAXLENGTH],Ciphertext[MAXLENGTH];//分別用于存放加//密前的明//文和加密后的密文intDecryptionText[MAXLENGTH];//存放解密后的明文////////////////////////////////////////////////////////////
6、//以下為加密算法voidEncryption(){//加密算法cout?〃請輸入兩個較大的素數(shù):〃;cin?p?q;cout?/zp="<
>e;floatdO;for(inti二1;;i++){///求解乘法逆元e*d三1(modphi)dO=(float)(phi
7、*i+l)/e;if(dO-(int)dO==0)break;}d=(int)dO;cout?endl;cout?〃e二”?e?“,d=z/?d?endl;cout?"公開密鑰Pk={e,n}={"<8、intj=0;jclear[j];if(clear[j]==-1)break;count=e;while(count>0){//對明文進(jìn)行加密Ciphertext=(c1ear)"emodnCiphertext[j]=(