Re: 我在練習寫rsa加密遇到一些問題help
※ 引述《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 》──┘ ◥╲ 趕快為班上設個秘密基地吧! ◢
--
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章