写出ELGamal公钥密码算法的加密、解密过程
2016-04-23 14:45
941 查看
1、写出ELGamal公钥密码算法的加密、解密过程
2、假设p=2579,a=2,d=765,试用ElGamal公钥算法对明文m=1299进行加密(选取的随机整数k=853),并用解密算法验证其结果的正确性。
运行结果:
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; }
运行结果:
相关文章推荐
- Docker基础技术:DeviceMapper
- Android之Viewpager+Fragment实现懒加载
- HDU 5670 Machine
- 数据结构—约瑟夫问题
- window server2012 + IIS8.0 + tomcat 集成环境搭建
- ThreadLocal详解
- 1006
- MMORPG游戏设计
- Github安装到windows7的配置说明
- Cron Expression
- Docker基础技术:AUFS
- SecureCRT日志和卷屏行数设置
- RSA公钥密码算法的实现
- Docker基础技术:Linux CGroup
- Docker基础技术:Linux Namespace(下)
- 关于windows下NODE_ENV=test无效的情况解决办法
- UI控件之UIControl
- 解决Ubuntu中QtCreator(3.6.1)不能使用搜狗输入法录入汉字问题
- Docker基础技术:Linux Namespace(上)
- JQuery validate验证规则