用c语言实现蚂蚁算法,rsa算法的c语言实现
rsa算法的c語言實現
RSA 算法的 C 語言實現一、RSA 算法的描述 1、選取長度相等的兩個大素數 p 和 q,計算其乘積: n=pq 然后隨機選取加密密鑰 e,使 e 和 (p–1)(q–1)互素。 最后用歐幾里德擴展算法計算解密密鑰 d,以滿足 ed=1(mod(p–1)(q–1)) 即 d= e–1mod((p–1)(q–1)) e 和 n 是公鑰,d 是私鑰 2、加密公式如下: ci=mi^e( modn)3、解密時,取每一密文分組 ci 并計算: 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 程序實現 #includeintcandp(inta,intb,intc) //數據處理函數,實現冪的取余運算 {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 互素時返回 0 else return1; //x 與 y 不互素時返回 1 }voidmain() {int p,q,e,d,m,n,t,c,r;printf(“請輸入兩個素數 p,q:“);scanf(“%d%d“,n=p*q; printf(“計算得 n 為 %3d\n“,n); t=(p-1)*(q-1); //求 n 的歐拉數 printf(“計算得 t 為 %3d\n“,t); printf(“請輸入公鑰 e:“); scanf(“%d“,if(et||fun(e,t)) { printf(“e 不合要求,請重新輸入 :“); //et 或 e 與 t 不互素時,重新輸入 scanf(“%d“,} d=1;while(((e*d)%t)!=1) d++; //由公鑰 e 求出私鑰 d printf(“經計算 d 為 %d\n“,d); printf(“加密請輸入 1\n“); //加密或解密選擇 printf(“解密請輸入 2\n“); scanf(“%d“,switch(r) { case1:printf(“請輸入明文 m:“); //輸入要加密的明文數字 scanf(“%d“,c=candp(m,e,n); printf(“密文為 %d\n“,c);break; case2:printf(“請輸入密文 c:“); //輸入要解密的密文數字 scanf(“%d“, m=candp(c,d,n); printf(“明文為 %d\n“,m);break; }}三、程序運行結果及相關說明 主函數實現求 N 的歐拉數、由公鑰求解私鑰、加密解密選擇以及相應的密文明文輸出。 子函數 candp 實現加密解密時的求冪取余運算,fun 實現 e 與 t 的互素判斷,已驗證 e 是否 符合要求。程序主體參考了網上的相關 RSA 算法程序,我對其中 e 的合法性判斷、主函數 實現的順序以及相關提示信息做了補充與修改并加上了注釋,這樣程序可讀性更強,運行時 更容易操作,思路也更加嚴密。 當 P=43,q=59 時,對 134 進行加密,運行結果如下:第一次取 e 為 15,與 t 不互素,提示需重新輸入,輸入 13 后,便可以進行正確操作。 由于 int 型變量為十六位,因此 n 最大只能小于 65536,此程序只是對 RSA 算法的入門,無 法實現達到安全要求的數據位數。
總結
以上是生活随笔為你收集整理的用c语言实现蚂蚁算法,rsa算法的c语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs 实现文件拷贝
- 下一篇: c语言文学研究助手题目,各位达人,给小弟