看板Programming
标 题Re: 我在练习写rsa加密遇到一些问题help
发信站KKCITY (Wed Jul 18 08:21:16 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.au!zoonews.ee.ntu!news
※ 引述《notr (notr)》之铭言:
> ※ 引述《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 │ ^_^ / 随选随播免等待 KKBOX◤ ^_^ /
└──《From:59.126.117.59
》──┘ ◤ http://www.kkbox.com.tw ◤
--