您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页ElGamal加密算法

ElGamal加密算法

来源:爱站旅游
/*α=2,p=7,a=3,x=8,r=5;加密变换Ek(x,r)=(y1,y2)*/

#include

using namespace std;

unsigned long moni(int n,unsigned long d) {

unsigned long a,b,r,q;

long v,w,t;

a=n;

b=d;

t=0;

v=1;

q=a/b;

r=a%b;

//定义求模逆运算的函数

while(r!=0) //用展转相除法求模逆

{

a=b;

b=r;

w=v;

v=t-q*v;

t=w;

q=a/b;

r=a%b;

}

if(v<0)

v=n+v;

return v;

}

unsigned long Erjinzhif(int m,int a) //定义二进制求m的a次方运算的函数

{

unsigned long num;

int y,i,sum;

int g=0,d[32]={0};

sum=0;

num=1;

while(a>0) //用求二进制的方法求m的a次方,将a化为二进制

{

sum=a%2;

d[g]=sum;

g++;

a=(int)(a/2);

}

num=m*m;

for(i=g-2;i>=1;i--) {

if(d[i]==1) y=m;

else y=1;

num=num*y;

num=num*num;

}

return num;

}

void main() //用求出的二进制的各位作指数与原值相乘再求平方 //主函数main

{

int i,p,a,b,c,x,r,y1,y2,m,g;

unsigned long x1,y;

y1=1;

y2=1;

m=1;

c=1;

cout<<\"************ElGamal密码算法的应用************\"<cout<<\"请输入本原α的值:α=\";

cin>>b;

cout<<\"请输入大素数p的值:p=\";

cin>>p;

cout<<\"请输入随机整数a(a>=0&&a<=(p-2))的值:a=\";

cin>>a;

cout<<\"请输入要发送的消息x的值:x=\";

cin>>x;

cout<<\"请输入随机数r(r>=0&&r<=(p-2))的值:r=\";

cin>>r;

for(i=0;i<(a*r);i++)

{

y2=b*y2;

y2=y2%p;

}

for(i=0;i{

y1=y1*b;

y1=y1%p;

}

y=Erjinzhif(a,y1); //调用求y1的a次方的值的函数

x1=moni(p,y); //调用求模逆运算的函数

g=(x1*c)%p;

c=((x%p)*(y2%p))%p;

cout<<\"*********************************************\"<cout<<\" A发送给B的密文:y=(\"<cout<<\"*********************************************\"<cout<<\" B接收到密文解密后明文是:\"<cout<<\"*********************************************\"<}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务