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

来源:互联网 发布:那种牌子的网络电视好 编辑:程序博客网 时间:2024/05/29 13:25

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;}

运行结果:
这里写图片描述

0 0
原创粉丝点击