您的位置:首页 > 其它

写出ELGamal公钥密码算法的加密、解密过程

2016-04-23 14:45 941 查看
1、写出ELGamal公钥密码算法的加密、解密过程

2、假设p=2579,a=2,d=765,试用ElGamal公钥算法对明文m=1299进行加密(选取的随机整数k=853),并用解密算法验证其结果的正确性。

程序:
#include<iostream>
using namespace std;
int modmi(int x,int r,int n){
int a=x,b=r,c=1;
while(b!=0){
if(b%2==0){
b=b>>1;
a=(a*a)%n;
}
else{
b=b-1;
c=(c*a)%n;
}
}
return c;
}
void gcd1(int a,int b,int &a1){
a1=1;
int n1=a;int n2=b;int a2=0;int b2=1;int b1=0;
int q,r,t;
q=n1/n2;
r=n1-q*n2;
while(r!=0){
q=n1/n2;
r=n1-q*n2;
n1=n2;
n2=r;
t=a2;
a2=a1-q*a2;
a1=t;
t=b2;
b2=b1-q*b2;
b1=t;
}
a1=(a1+5*b)%b;
}
int main(){
int m,p,a,d,k,m1;
int c1,c2,c,b,c11;
cout<<"请输入明文m:";
cin>>m;
cout<<"请输入素数p:";
cin>>p;
cout<<"请输入素数a:";
cin>>a;
cout<<"请输入随机整数d:";
cin>>d;
cout<<"请输入秘密随机整数k:";
cin>>k;
c1=modmi(a,k,p);
b=modmi(a,d,p);
c2=(m%p*modmi(b,k,p))%p;
cout<<"c=("<<c1<<","<<c2<<")"<<endl;
gcd1(modmi(c1,d,p),p,c11);
m1=(c2*c11)%p;
cout<<"验证得明文为:"<<m1<<endl;
return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: