Re: 我在練習寫rsa加密遇到一些問題help

看板Programming作者時間18年前 (2007/07/18 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《b8121 ( )》之銘言: > #include <stdio.h> > #include <math.h> > main() > { > int m,p=7,q=17,e=5,n=119; > long nm,d=77,c; > printf("請輸入明文數: "); > scanf("%d", &m); > getchar(); > printf("\np=41,q=29,e=61,d=71,n=1189\n") ; > c=((int)(pow(m, e))%n) ; > printf("密文= %d\n", c); > getchar(); > nm=((long)(pow(c,d))% n); > printf("m= %d\n", nm); > getchar(); > } > nm=((long)(pow(c,d))% n); <-----應該是這裏發生了溢位問題 > 可是強制轉型成為double型態的話取mod又會出錯!請問一下有 > 其他方法能解決嗎 用迴圈去乘, 每乘一次就立刻 %n 不要用 pow 去做 像這樣計算 x^y % n: int ipow(int x,int y,int n) { int z; for (z=1; y>0; y/=2) { if (y%2 != 0) { z=(z*x)%n; } x=(x*x)%n; } return z; } -- ┌─────KKCITY─────┐ ◢╱ 只要你通過身份認證 ~ ◥█ bbs.kkcity.com.tw 免經驗、五人連署即開班系板 └──From:210.192.249.118 ──┘ ◥╲ 趕快為班上設個秘密基地吧! --
文章代碼(AID): #16dGFo00 (Programming)
文章代碼(AID): #16dGFo00 (Programming)