资源简介

使用Elgamal公钥密码系统实现数字签名的程序,程序很小巧。可以自动生成大素数,经测试无误。

资源截图

代码片段和文件信息

#include
#include 
#include
using namespace std;
int ab;
int prime_number_p();
int random(int);
int m_develop(int );
/*---------------------------------*/
int prime(int p)
{int ij;
for(i=2;i{j=p%i;
if(j==0)return 0;
}
return 1;
}//判断是否为素数若为素数则返回1
/*------------------------------------*/
int prime_number_max(int nint m)
{
int p;

for(p=m;p>=n;p--)
{if(prime(p)==1)
return p;
}
}//求出nm之间的最大素数
/*--------------------------------*/
int prime_number_p()
{
int pmn;
cout<<“为一组用户产生一个公钥P(p为素数)“< cout<<“请输入p所在范围n,m(系统将选择最大的素数P)“< cout<<“n=“;
cin>>n;
cout<<“m=“;
cin>>m;
p=prime_number_max(nm);
if(p==0)

cout<<“nm中无素数“;
p=prime_number_p();
}
return p;
}//p的产生
/*-------------------------------*/
int Random_number_g(int p) 
{  int g;
srand((int) time (NULL));
g=rand()%p;
return g;
}//g的产生
int PKI_y(int pint gint x)
{int y;
int i;
y=1;
for(i=0;i{y*=g;
y%=p;}
return y;
}//公钥y的产生
int gcd(int aint b)
{
int s[50]q[50];
if(a>b)
{
s[0]=a;
s[1]=b;
}
else
{
s[0]=a;
s[1]=b;
}
for(int i=1;i<100;i++)
{
s[i+1]=s[i-1]%s[i];
q[i]=s[i-1]/s[i];
if(s[i+1]==0) return s[i];
}
//return s[i];
}//求a,b是否互素
/*----------------------------------*/
int m_develop(int p)
{
int m;
cin>>m;
if (m>p)
{
cout<<“无法对输入的m进行签名请重新输入“< m=m_develop(p);
}
return m;
}
int prime_k(int p)
{
int ki;
k=rand()%p;
i=gcd(kp-1);
if(i!=1)
{
k=prime_k(p);

}
return k;
}//随即数k的产生
/*-----------------------------------*/
void elg_sign_develop(int gint pint xint m)
{  
 int k;
int i=1;
k=prime_k(p);//产生一个k的随机数k与p-1互质
//a=(g^k)%p;
for(i=0;i{
a*=g;
a%=p;
}
//while(m!=(a*x+k*i)%(p-1))
//{i++;}b=i;
for(i=0;i{
b=i;
if((x*a+k*b)%(p-1)==m) break;
}
k=0;//丢弃随即数K
cout<}//产生签名
/*-------------------*/
void elg_sign_test(int yint pint mint g)
{int ic1d1j;
c1=d1=j=1;
//i=((y^a)*(a^b))%p;
for(i=0;i{
c1*=y;
c1%=p;
}
for(i=0;i{
d1*=a;
d1%=p;
}
d1*=c1;
d1%=p;
//j=(g^m)%p;
for(i=0;i{
j*=g;
j%=p;
}

if(d1==j)
{
cout<<“是用户签名的。“<}
else
{
cout<<“不是用户签名的“<}
}//验证签名
/*------------------*/
void main()
{
int pgxymi;
a=b=1;
//char name;
p=prime_number_p();//产生大素数p
g=Random_number_g(p);//产生随即数g
cout<<“此用户组的公共参数为p=“<//cout<<“输入用户名“<//cin>>name;
x=p+1;
while(x>=p)
{cout<<“输入用户密码“<cin>>x;
if(x>=p)
cout<<“密码格式错误;“<y=PKI_y(pgx);//公钥y的产生
cout<<“公钥y是“<cout<<“输入要签名的字符m“<m=m_develop(p);
elg_sign_develop(gpxm);
elg_sign_test(ypmg);
system(“pause“);
/*jj:cout<<“结束程序请输入0“<   cin>>i;
   if(i==0)
   exit(0);
   else 
   goto jj;*/

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        476  2012-09-08 14:34  Elgdown\Debug\cl.command.1.tlog

     文件       7066  2012-09-08 14:34  Elgdown\Debug\CL.read.1.tlog

     文件        204  2012-09-08 14:34  Elgdown\Debug\CL.write.1.tlog

     文件      40960  2012-09-08 14:34  Elgdown\Debug\Elgdown.exe

     文件        381  2012-09-08 14:34  Elgdown\Debug\Elgdown.exe.intermediate.manifest

     文件     381968  2012-09-08 14:34  Elgdown\Debug\Elgdown.ilk

     文件         48  2012-09-08 14:34  Elgdown\Debug\Elgdown.lastbuildstate

     文件       2102  2012-09-08 14:34  Elgdown\Debug\Elgdown.log

     文件      59906  2012-09-08 14:34  Elgdown\Debug\elgdown.obj

     文件     568320  2012-09-08 14:34  Elgdown\Debug\Elgdown.pdb

     文件       1046  2012-09-08 14:34  Elgdown\Debug\link.command.1.tlog

     文件       2154  2012-09-08 14:34  Elgdown\Debug\link.read.1.tlog

     文件        408  2012-09-08 14:34  Elgdown\Debug\link.write.1.tlog

     文件        368  2012-09-08 14:34  Elgdown\Debug\mt.command.1.tlog

     文件        706  2012-09-08 14:34  Elgdown\Debug\mt.read.1.tlog

     文件        192  2012-09-08 14:34  Elgdown\Debug\mt.write.1.tlog

     文件     207872  2012-09-08 14:34  Elgdown\Debug\vc100.idb

     文件     241664  2012-09-08 14:34  Elgdown\Debug\vc100.pdb

     文件       3105  2012-09-08 14:34  Elgdown\elgdown.cpp

     文件    5656576  2013-06-20 14:29  Elgdown\Elgdown.sdf

     文件        880  2012-09-08 14:24  Elgdown\Elgdown.sln

    ..A..H.     10752  2013-06-20 14:29  Elgdown\Elgdown.suo

     文件       3224  2012-09-08 14:24  Elgdown\Elgdown.vcxproj

     文件        958  2012-09-08 14:24  Elgdown\Elgdown.vcxproj.filters

     文件        143  2012-09-08 14:24  Elgdown\Elgdown.vcxproj.user

     文件   14483456  2013-06-20 14:22  Elgdown\ipch\elgdown-c57dcb77\elgdown-4242373c.ipch

     目录          0  2013-06-20 14:22  Elgdown\ipch\elgdown-c57dcb77

     目录          0  2012-09-08 14:34  Elgdown\Debug

     目录          0  2013-06-20 14:22  Elgdown\ipch

     目录          0  2013-06-20 14:29  Elgdown

............此处省略3个文件信息

评论

共有 条评论