用c语言实现蚂蚁算法,rsa算法的c语言实现
rsa算法的c語言實(shí)現(xiàn)
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 源程序//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\n“,r); returnr; }intfun(intx,inty) //公鑰 e 與 t 的互素判斷{Int t;while(y) { t=x;x=y;y=t%y;}if(x== 1) return0; //x 與 y 互素時(shí)返回 0 else return1; //x 與 y 不互素時(shí)返回 1 }voidmain() {int p,q,e,d,m,n,t,c,r;printf(“請輸入兩個(gè)素?cái)?shù) p,q:“);scanf(“%d%d“,n=p*q; printf(“計(jì)算得 n 為 %3d\n“,n); t=(p-1)*(q-1); //求 n 的歐拉數(shù) printf(“計(jì)算得 t 為 %3d\n“,t); printf(“請輸入公鑰 e:“); scanf(“%d“,if(et||fun(e,t)) { printf(“e 不合要求,請重新輸入 :“); //et 或 e 與 t 不互素時(shí),重新輸入 scanf(“%d“,} d=1;while(((e*d)%t)!=1) d++; //由公鑰 e 求出私鑰 d printf(“經(jīng)計(jì)算 d 為 %d\n“,d); printf(“加密請輸入 1\n“); //加密或解密選擇 printf(“解密請輸入 2\n“); scanf(“%d“,switch(r) { case1:printf(“請輸入明文 m:“); //輸入要加密的明文數(shù)字 scanf(“%d“,c=candp(m,e,n); printf(“密文為 %d\n“,c);break; case2:printf(“請輸入密文 c:“); //輸入要解密的密文數(shù)字 scanf(“%d“, m=candp(c,d,n); printf(“明文為 %d\n“,m);break; }}三、程序運(yùn)行結(jié)果及相關(guān)說明 主函數(shù)實(shí)現(xiàn)求 N 的歐拉數(shù)、由公鑰求解私鑰、加密解密選擇以及相應(yīng)的密文明文輸出。 子函數(shù) candp 實(shí)現(xiàn)加密解密時(shí)的求冪取余運(yùn)算,fun 實(shí)現(xiàn) e 與 t 的互素判斷,已驗(yàn)證 e 是否 符合要求。程序主體參考了網(wǎng)上的相關(guān) RSA 算法程序,我對其中 e 的合法性判斷、主函數(shù) 實(shí)現(xiàn)的順序以及相關(guān)提示信息做了補(bǔ)充與修改并加上了注釋,這樣程序可讀性更強(qiáng),運(yùn)行時(shí) 更容易操作,思路也更加嚴(yán)密。 當(dāng) P=43,q=59 時(shí),對 134 進(jìn)行加密,運(yùn)行結(jié)果如下:第一次取 e 為 15,與 t 不互素,提示需重新輸入,輸入 13 后,便可以進(jìn)行正確操作。 由于 int 型變量為十六位,因此 n 最大只能小于 65536,此程序只是對 RSA 算法的入門,無 法實(shí)現(xiàn)達(dá)到安全要求的數(shù)據(jù)位數(shù)。
總結(jié)
以上是生活随笔為你收集整理的用c语言实现蚂蚁算法,rsa算法的c语言实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs 实现文件拷贝
- 下一篇: c语言文学研究助手题目,各位达人,给小弟