y1=y3; } }
return x3; }
//求两点纵坐标的和
intsumy(int x1,int y1,int x2,int y2,int k,inta,int p) {
int x3,y3,i,u=x1,v=y1,m=x2,n=y2; if(k==1) {
x3=f2(u,v,m,n,a,p)*f2(u,v,m,n,a,p)-u-m; x3=mod(x3,p);
y3=f2(u,v,m,n,a,p)*(u-x3)-v; y3=mod(y3,p); } else {
for(i=1;i<=k-1;i++) {
x3=f2(u,v,m,n,a,p)*f2(u,v,m,n,a,p)-u-m; x3=mod(x3,p);
y3=f2(u,v,m,n,a,p)*(u-x3)-v; y3=mod(y3,p); m=x1; u=x3; n=y1; v=y3; } }
return y3; }
//加密过程
voidencry(int x1,int y1,int x2,int y2,int k, int a, intp,int r) {
int c1x,c1y,bx,by,bx1,by1,mbx,mby; c1x=sumx(x1,y1,x1,y1,r,a,p); c1y=sumy(x1,y1,x1,y1,r,a,p); bx1=sumx(x1,y1,x1,y1,k,a,p); by1=sumy(x1,y1,x1,y1,k,a,p);
bx=sumx(sumx(x1,y1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),sumx(x1,y1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),r,a,p);
by=sumy(sumx(x1,y1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),sumx(x1,y1,x1,y1,k,a,p),sumy(x1,y1,x1,y1,k,a,p),r,a,p); mbx=sumx(x2,y2,bx,by,1,a,p); mby=sumy(x2,y2,bx,by,1,a,p);
cout<<\; }
void main() {
cout<<\令曲线方程格式为y^2=x^3+ax+b\ inta,b,c,d,m,n,x,y,r; cout<<\请输入a的值:\ cin>>a;
cout<<\请输入b的值:\ cin>>b;
cout<<\请给定一个素数P:\ cin>>c;
cout<<\请给定一个秘密正数k:\ cin>>d;
cout<<\令曲线上点的格式为(x1,y1):\ cout<<\请输入x1的值:\ cin>>m;
cout<<\请输入y1的值:\ cin>>n;
cout<<\令消息的格式为(x2,y2)\ cout<<\请输入x2的值:\ cin>>x;
cout<<\请输入y2的值:\ cin>>y;
cout<<\请任选一个整数r:\ cin>>r;
cout<<\加密消息为:\ encry(m,n,x,y,d,a,c,r); cout< 程序开始运行的界面:
相关推荐: