日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用c语言实现蚂蚁算法,rsa算法的c语言实现

發布時間:2023/12/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用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语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。