RSA的C語言算法實(shí)現(xiàn)

RSA的C語言算法實(shí)現(xiàn)

ID:46580172

大小:116.03 KB

頁數(shù):3頁

時(shí)間:2019-11-25

RSA的C語言算法實(shí)現(xiàn)_第1頁
RSA的C語言算法實(shí)現(xiàn)_第2頁
RSA的C語言算法實(shí)現(xiàn)_第3頁
資源描述:

《RSA的C語言算法實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、RSA算法的C語言實(shí)現(xiàn)一、RSA算法的描述1、選取長度相等的兩個(gè)大素?cái)?shù)p和q,計(jì)算其乘積:n=pq然后隨機(jī)選取加密密鑰e,使e和(p–1)(q–1)互素。最后用歐幾里德擴(kuò)展算法計(jì)算解密密鑰d,以滿足ed=1(mod(p–1)(q–1))即d=e–1mod((p–1)(q–1))e和n是公鑰,d是私鑰2、加密公式如下:ci=mi^e(modn)3、解密時(shí),取每一密文分組ci并計(jì)算:mi=ci^d(modn)Ci^d=(mi^e)^d=mi^(ed)=mi^[k(p–1)(q–1)+1]=mimi^[k(p–1)(q–1)]=mi*1=mi4、消息也可以用d加密用e解密二、C源

2、程序//RSA算法的C程序?qū)崿F(xiàn)#includeintcandp(inta,intb,intc)//數(shù)據(jù)處理函數(shù),實(shí)現(xiàn)冪的取余運(yùn)算{intr=1;b=b+1;while(b!=1){r=r*a;r=r%c;b--;}printf("%d",r);returnr;}intfun(intx,inty)//公鑰e與t的互素判斷{intt;while(y){t=x;x=y;y=t%y;}if(x==1)return0;//x與y互素時(shí)返回0elsereturn1;//x與y不互素時(shí)返回1}voidmain(){intp,q,e,d,m,n,t,c,r;print

3、f("請(qǐng)輸入兩個(gè)素?cái)?shù)p,q:");scanf("%d%d",&p,&q);n=p*q;printf("計(jì)算得n為%3d",n);t=(p-1)*(q-1);//求n的歐拉數(shù)printf("計(jì)算得t為%3d",t);printf("請(qǐng)輸入公鑰e:");scanf("%d",&e);if(e<1

4、

5、e>t

6、

7、fun(e,t)){printf("e不合要求,請(qǐng)重新輸入:");//e<1或e>t或e與t不互素時(shí),重新輸入scanf("%d",&e);}d=1;while(((e*d)%t)!=1)d++;//由公鑰e求出私鑰dprintf("經(jīng)計(jì)算d為%d",d);pr

8、intf("加密請(qǐng)輸入1");//加密或解密選擇printf("解密請(qǐng)輸入2");scanf("%d",&r);switch(r){case1:printf("請(qǐng)輸入明文m:");//輸入要加密的明文數(shù)字scanf("%d",&m);c=candp(m,e,n);printf("密文為%d",c);break;case2:printf("請(qǐng)輸入密文c:");//輸入要解密的密文數(shù)字scanf("%d",&c);m=candp(c,d,n);printf("明文為%d",m);break;}}三、程序運(yùn)行結(jié)果及相關(guān)說明主函數(shù)實(shí)現(xiàn)求N的歐拉數(shù)、由公鑰求解私鑰、加

9、密解密選擇以及相應(yīng)的密文明文輸出。子函數(shù)candp實(shí)現(xiàn)加密解密時(shí)的求冪取余運(yùn)算,fun實(shí)現(xiàn)e與t的互素判斷,已驗(yàn)證e是否符合要求。程序主體參考了網(wǎng)上的相關(guān)RSA算法程序,我對(duì)其中e的合法性判斷、主函數(shù)實(shí)現(xiàn)的順序以及相關(guān)提示信息做了補(bǔ)充與修改并加上了注釋,這樣程序可讀性更強(qiáng),運(yùn)行時(shí)更容易操作,思路也更加嚴(yán)密。當(dāng)P=43,q=59時(shí),對(duì)134進(jìn)行加密,運(yùn)行結(jié)果如下:第一次取e為15,與t不互素,提示需重新輸入,輸入13后,便可以進(jìn)行正確操作。由于int型變量為十六位,因此n最大只能小于65536,此程序只是對(duì)RSA算法的入門,無法實(shí)現(xiàn)達(dá)到安全要求的數(shù)據(jù)位數(shù)。

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。