基于服务器安全ELGamal公钥密码实现
对于新世界主机香港服务器的安全,是需要各种加密技术,对于公钥密码体制当中,以前小编为大家讲述了RSA公钥密码算法(建立在大整数因子分解的困难性之上)。而这个ELGamal公钥密码算法与RSA有所不同,所以小编带大家学习这个ELGamal公钥密码算法。
ElGamal密码体制是T. ElGamal于1985年提出,是最有名的公钥密码体制之一,它的安全性是基于离散对数问题。
ElGamal密码体制的具体描述如下。
1)密钥的生成
系统选取一个大素数p, 是p的一个本原元(又称素根)。随机生成一个整数x,2≤ⅹ≤p-2并计算: 。
以(p,a,y )作为用户的公开密钥,而 作为用户的秘密密钥。
2)加密
设用户想加密的明文为 ,其加密过程如下:
(1)随机选择一个整数 k,
,并计算
(2)密文分组二元组(c1,c2 )。
3)解密
用户用秘密密钥 对密文(c1,c2 )的解密过程如下:
很容易验证解密过程的有效性,因为
而用户公钥
,所以,
在ElGamal密码体制中,加密运算结果具有随机性,因为密文既依赖于明文,又依赖于加密过程中选择的随机数。所以,对于同一个明文,会有许多可能的密文,即ElGamal密码算法是非确定性算法。
下面的例子说明在ElGamal密码体制中所进行的计算。
设p=2579,a=2 。可以验证a 是模 p的本原元。用户B选择x=765 作为自己的私钥,所以其对应公钥
现设用户A想要传送消息m=1299 给用户B。假设A选择的随机数k=853 ,那么A计算
和
×
下面介绍ElGamal密码算法程序实现:
算法实现伪代码如下:
{
int g,x1,y,c1,c2,m,x,z,t;int i,j,b[p];
printf("请先选择一组公钥与私钥(输入私钥):");
scanf("%d",&x1);
printf("101的本原元素为:\n");
for(i=1;i
{
memset(b,0,p-1);
for(j=0;j
{
b[test3(i,j)]=1;
}
for(j=p;j>=1;j--)
{
if(b[j]==0)
break;
}
if(j==0) printf("%d ",i);
else continue;
}
printf("\n请输入GF(p)上的本原元素g:");
scanf("%d",&g);
printf("请输入随机数x:");
scanf("%d",&x);
printf("请输入明文m:");
scanf("%d",&m);
y=int (test3(g,x1));
c1=int (test3(g,x));
z=int(test3(m,1));
t=int(test3(y,x));
c2=int ((z*t)%p);
printf("传输的密文为:(%d,%d)",c1,c2);
}
基于服务器安全ELGamal公钥密码实现已经给大家讲清楚了。如果您还有什么不明确或不懂的地方,欢迎咨询新世界主机了解,详细请咨询Skpey咨询:vpssj.net@hotmail.com, ;我们将竭诚为您服务。