資源描述:
《RSA算法的實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、密碼學(xué)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)八、RSA算法的實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康呐c意義掌握并實(shí)現(xiàn)RSA算法。二、實(shí)驗(yàn)環(huán)境Windowsxpsp2Microsoftvisualc++6.0三、實(shí)驗(yàn)原理1)非對(duì)稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對(duì),如果用公開密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。非對(duì)稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰
2、的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專用密鑰對(duì)加密后的信息進(jìn)行解密。非對(duì)稱加密算法另一方面,甲方可以使用乙方的公鑰對(duì)機(jī)密信息進(jìn)行簽名后再發(fā)送給乙方;乙方再用自己的私匙對(duì)數(shù)據(jù)進(jìn)行驗(yàn)簽。[1]甲方只能用其專用密鑰解密由其公用密鑰加密后的任何信息。非對(duì)稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。非對(duì)稱密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對(duì)稱加密解密的速度快。對(duì)稱密碼體制中只有一種密鑰,并且是非公開的,如果要解密就得讓對(duì)方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對(duì)稱密鑰體制有兩種密鑰
3、,其中一個(gè)是公開的,這樣就可以不需要像對(duì)稱密碼那樣傳輸對(duì)方的密鑰了。這樣安全性就大了很多。2)利用CC++實(shí)現(xiàn)RSA算法的加、解密運(yùn)算。具體包括:1)利用擴(kuò)展的EUCLID計(jì)算amodn的乘法逆元;2)Miller-Rabin素性測(cè)試算法對(duì)一個(gè)給定的大數(shù)進(jìn)行測(cè)試;3)實(shí)現(xiàn)的運(yùn)算,并計(jì)算;1)利用Fermat定理手工計(jì)算,并與3)計(jì)算的結(jié)果對(duì)比;2)實(shí)現(xiàn)RSA算法。并對(duì)"ILOVETHEPEOPLE'SREPUBLICOFCHINA"加解密。說明:為了方便實(shí)現(xiàn),分組可以小一點(diǎn),比如兩個(gè)字母一組。字母及其數(shù)字編碼字母及其數(shù)字編碼空格00N14A01O15B02P16C03Q17D04R18E05
4、S19F06T20G07U21H08V22I09W23J10X24K11Y25L12Z26M13一、實(shí)驗(yàn)代碼:#include#include#includeusingnamespacestd;intEuclid(inta,intn)//n大于a{intx,y,r;x=n;y=a;for(inti=0;;){if(y==0)returnx;if(y==1)returny;r=x%y;x=y;y=r;}}doubleextenEuclid(doublea,doublen)//利用擴(kuò)展的EUCLID計(jì)算amodn的乘法逆元{doublex1=1,
5、x2=0,x3=n,y1=0,y2=1,y3=a,Q;doublet1,t2,t3;for(inti=0;;){if(y3==0){returnx3;cout<<"noreverse"<b;unsignedintN=n-1;for(inti=0,j=1;
6、;i++){if(j>N)break;if((N>>i)&(unsignedint)1)b.push_back(1);elseb.push_back(0);j*=2;}//將n-1表示成二進(jìn)制形式for(intk=0;k=0;ii--){x=d;d=(d*d)%n;if(d==1&&x!=1&&x!=n-1)returnfalse;if(b[ii]==1)d=(d*a)%n;}if(d!=1)returnfalse;returntrue;}doubleq
7、uickindex1(doublea,doublem,doublen)//實(shí)現(xiàn)a^mmodn的運(yùn)算{vectorb;unsigneddoubleN=m;for(intii=0,j=1;;ii++){if(j>N)break;if((N>>ii)&(unsigneddouble)1)b.push_back(1);elseb.push_back(0);j*=2;}doublec=0,d=1;