看板Programming
标 题Re: 我在练习写rsa加密遇到一些问题help
发信站KKCITY (Wed Jul 18 00:51:53 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.au!zoonews.ee.ntu!news
※ 引述《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
》──┘ ◥╲ 赶快为班上设个
秘密基地吧!
◢
--