利用中国剩余定理加速解密算法求解

/求出 p,q

#include

#include

void main()

{

int n=3026533,i,p,q;

for (i=2;i<=sqrt(n);i++)

if(n%i==0)

{p=i;

q=n/p;

printf("%d %d\n",p,q); 

}

}

#include

//求出c1,c2,d1,d2

void main()

{

int p=1511,p1,p2,q=2003,c=152702,c1,c2,d=2015347,d1,d2,e=3,m1,m2;

 c1=c%p;

c2=c%q;

d1=d%(p-1);

d2=d%(q-1);

printf("c1:%d\nc2:%d\nd1:%d\nd2:%d\n",c1,c2,d1,d2);

}

//求出m1 ,m2

#include

void main(int x,int r,int n)

{//int x=91,r=527,n=1511;

printf("输入三个数:\n");

scanf("%d%d%d",&x,&r,&n);

int i=0,temp,a[30],first=1;

for(;i<30;i++)

{temp=r%2;

a[i]=temp;

r=r/2;

if(r==0)

break;

}

for(;i>=0;i--)

{

first=first*first %n;

if(a[i]==1)

first=(first*x)%n;

}

printf("%d\n",first);

}

//求出m

#include

void main()

{

int m1=1074,m2=1819,p=1511,q=2003,i,m;

int M1,M2,M11,M22;

M1=2003;

M2=1511;

for(i=0;i

if(M1*i%M2==1)

M11=i;

for(i=0;i

if(M2*i%M1==1)

M22=i;

printf("M11:%d\nM22:%d\n",M11,M22); 

m=(M1*M11*m1+M2*M22*m2)026533;

printf("m:%d\n",m);

 

}

转载于:https://my.oschina.net/u/1754792/blog/229303

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值