3、是私鑰。是秘密的。Alice將她的公鑰傳給Bob,而將她的私鑰藏起來。圖1RSA加密過程2.實(shí)例描述(1)選擇兩個(gè)素?cái)?shù),。(2)計(jì)算。(3)計(jì)算。(4)選擇使其與互素且小于,這里選擇。(5)確定使得且。因?yàn)椋???衫脭U(kuò)展的歐幾里得算法來計(jì)算。所得的公鑰、私鑰。該例說明了輸入明文時(shí)這些密鑰的使用情況。加密時(shí)需計(jì)算。利用模算術(shù)的性質(zhì),我們?nèi)缦掠?jì)算:解密時(shí),我們計(jì)算3.RSA算法的安全性在RSA密碼應(yīng)用中,公鑰是被公開的,即和的數(shù)值可以被第三方竊聽者得到。破解RSA密碼的問題就是從已知的和的數(shù)值(等于),想法求出的
4、數(shù)值,這樣就可以得到私鑰來破解密文。從上文中的公式:或我們可以看出。密碼破解的實(shí)質(zhì)問題是:從的數(shù)值,去求出和。換句話說,只要求出和的值,我們就能求出的值而得到私鑰。當(dāng)和是一個(gè)大素?cái)?shù)的時(shí)候,從它們的積去分解因子和,這是一個(gè)公認(rèn)的數(shù)學(xué)難題。比如當(dāng)大到1024位時(shí),迄今為止還沒有人能夠利用任何計(jì)算工具去完成分解因子的任務(wù)。然而,雖然RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。此外,RSA的缺點(diǎn)還有:A)產(chǎn)生密鑰很麻煩,
5、受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,至少也要600bits以上,使運(yùn)算代價(jià)很高,尤其是速度較慢,較對(duì)稱密碼算法慢幾個(gè)數(shù)量級(jí);且隨著大數(shù)分解技術(shù)的發(fā)展,這個(gè)長度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。因此,使用RSA只能加密少量數(shù)據(jù),大量的數(shù)據(jù)加密還要靠對(duì)稱加密算法。4.程序代碼#includeintrsa(inta,intb,intc){intr=1;b=b+1;while(b!=1){r=r*a;r=r%c;b--;}printf("%d",r);ret
6、urnr;}voidmain(){intp,q,e,d,m,n,t,c,r;chars;printf("請輸入p,q:");scanf("%d%d",&p,&q);n=p*q;printf("n的值是%4d",n);t=(p-1)*(q-1);//歐拉函數(shù)printf("t的值是%4d",t);printf("請輸入e:");scanf("%d",&e);if(e<1
7、
8、e>t){printf("e出錯(cuò),請重新輸入");scanf("%d",&e);}d=1;while(((e*d)%t)!=1)d++;
9、printf("thencaculateoutthatthedis%d",d);printf("加密請輸入1");printf("解密請輸入2");scanf("%d",&r);switch(r){case1:printf("輸入要加密的明文數(shù)字m:");/*輸入要加密的明文數(shù)字*/scanf("%d",&m);c=rsa(m,e,n);printf("其密碼是%d",c);break;case2:printf("輸入要解密的密文數(shù)字c:");/*輸入要解密的密文數(shù)字*/scanf("%d",&c
10、);m=rsa(c,d,n);printf("其密碼是%d",m);break;}}5.程序測試結(jié)果圖2RSA加密圖3RSA解密總結(jié):通過c語言的程序?qū)崿F(xiàn)對(duì)RSA算法的理解加深了。