论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

基于rsa的数字签名(论文+程序)

在本软件中需要实现的功能有以下几个:

(1)生成RSA密钥:公钥ke=(e,n),私钥kd=(d,n); 内容来自论文无忧网 www.paper51.com

(2)利用MD5算法计算出消息摘要MD; paper51.com

(3)数字签名的实现:用私钥d对消息摘要进行加密计算(RSA算法中的加密方法); copyright paper51.com

(4)验证数字签名:用公钥e对数字签名进行解密计算(RSA算法中的解密方法),得到的解密结果与(2)步计算出的消息摘要比较,如果两个消息摘要一样则签名成功。

内容来自论文无忧网 www.paper51.com

3.1.2 本软件的总体要求和设计

内容来自论文无忧网 www.paper51.com

本软件的总体要求有:

http://www.paper51.com

1)按要求生成非对称密钥——公钥和私钥;

http://www.paper51.com

2)按任意写入的的消息字符串(明文信息)生成所需要的消息摘要MD;

http://www.paper51.com

3)在本设计中用产生的私钥d根据RSA算法的加密原理对所生成的消息摘要进行加密运算,得到数字签名; 内容来自论文无忧网 www.paper51.com

4)在本设计中用产生的公钥e根据RSA算法的解密原理对所加密的消息摘要即数字签名进行解密运算,得到对应的消息摘要(在本设计中标示的为解密信息),比较两个消息摘要,验证数字签名者的身份的真实与否;

内容来自论文无忧网 www.paper51.com

5)提示信息完整、操作舒适、图形界面雅观。

内容来自论文无忧网 www.paper51.com

本软件的总体设计都是基于C++的开发环境,采用的是Microsoft Visual c++ 6.0的运行环境。

内容来自论文无忧网 www.paper51.com

3.2 各部分的设计实现 内容来自论文无忧网 www.paper51.com

3.2.1 密钥产生的实现 paper51.com

在密钥的产生部分中起决定性作用的是素数的选择, 对随机数作素性检测,若通过则为素数;否则增加一个步长后再做素性检测,直到找出素数。素性检测采用Fermat测试。这个算法的理论依据是费尔马小定理:如果m是一个素数,且a不是m的倍数,那么根据费尔马小定理有:a m-1=1 (mod m)。 实际应用时:a m-1 = 1 ( mod m)Û a m = a ( mod m) Ûa= a m ( mod m),因此对于整数m,只需计算a m ( mod m),再将结果与a比较,如果两者相同,则m为素数。选取a=2,则a一定不会是任何素数的倍数。根据所选的素数的不同产生不同的密钥。 http://www.paper51.com

密钥的理论产生模块流程图如图3-1所示:

内容来自www.paper51.com

内容来自论文无忧网 www.paper51.com

图3-1 密钥产生 copyright paper51.com

密钥产生的部分代码实现: paper51.com

       CString str; paper51.com

   //第一步 产生任意素数

内容来自www.paper51.com

   GeneratePrimeNumbers();

内容来自论文无忧网 www.paper51.com

   //第二步 计算 n=p*q paper51.com

   m_n = m_Prime1 *m_Prime2;

内容来自论文无忧网 www.paper51.com

   //第三步 0=(p-1)(q-1)

paper51.com

   m_Undef = (m_Prime1-1) *(m_Prime2-1);

内容来自www.paper51.com

   //第四步 选择'e'

paper51.com

   SelectE(); 内容来自www.paper51.com

   //第五步 计算D

http://www.paper51.com

   CalculateD();

内容来自www.paper51.com

   //显示公钥和私钥

paper51.com

   //(1) 公钥 KU={e,n} 内容来自www.paper51.com

   str.Format("{%d,%d}",m_e,m_n); 内容来自论文无忧网 www.paper51.com

   m_public_key.SetWindowText(str);

内容来自论文无忧网 www.paper51.com

   //(2) 私钥KU={d,n}

内容来自论文无忧网 www.paper51.com

   str.Format("{%d,%d}",m_d,m_n);

内容来自论文无忧网 www.paper51.com

   m_private_key.SetWindowText(str); 内容来自www.paper51.com

   // 选择一个 'e'使 'e'与  m_Undef互素

copyright paper51.com

//选择e的函数的实现 copyright paper51.com

SelectE()

copyright paper51.com

{  CString str;

paper51.com

for(floati=2;i<100000;i++) 内容来自论文无忧网 www.paper51.com

   { paper51.com

       if(IsRelativePrime((float)m_Undef,(float)i))

paper51.com

       { 内容来自论文无忧网 www.paper51.com

          m_e=(long)i;

内容来自论文无忧网 www.paper51.com

          return; 内容来自www.paper51.com

       }

内容来自论文无忧网 www.paper51.com

   }

内容来自www.paper51.com

}

内容来自www.paper51.com

//互为素数的函数的实现

copyright paper51.com

IsRelativePrime(floatX,float Y) 内容来自www.paper51.com

{  float R;

内容来自www.paper51.com

//输入: X,Y  

http://www.paper51.com

if(X<Y)//如果X较小则交换两个值

内容来自www.paper51.com

   { 内容来自论文无忧网 www.paper51.com

       X=X+Y; 内容来自论文无忧网 www.paper51.com

       Y=X-Y;

copyright paper51.com

       X=X-Y;

内容来自www.paper51.com

   } 内容来自www.paper51.com

   //在这时X总是比Y大 paper51.com

   for(;;) 内容来自www.paper51.com

   { copyright paper51.com

       if(Y==0)

内容来自论文无忧网 www.paper51.com

          break;

内容来自论文无忧网 www.paper51.com

       R=fmod(X,Y);

内容来自论文无忧网 www.paper51.com

       X=Y; copyright paper51.com

       Y=R;

内容来自www.paper51.com

   }

copyright paper51.com

if(X!= 1)

内容来自论文无忧网 www.paper51.com

       returnfalse; paper51.com

   else

copyright paper51.com

       returntrue;//互素

copyright paper51.com

} paper51.com

// 计算D的函数的实现

内容来自论文无忧网 www.paper51.com

CalculateD()

paper51.com

{ http://www.paper51.com

   float d; 内容来自论文无忧网 www.paper51.com

   long d_dash;

http://www.paper51.com

   CString str; 内容来自www.paper51.com

   for(float k=1;k<100000;k++)

内容来自www.paper51.com

   {

内容来自www.paper51.com

       d=(m_Undef*k+1)/m_e; 内容来自www.paper51.com

       d_dash =(long)((m_Undef*k+1)/m_e);

内容来自www.paper51.com

       if(d ==d_dash) paper51.com

       { http://www.paper51.com

          m_d=d;

内容来自www.paper51.com

          return;

http://www.paper51.com

       } http://www.paper51.com

   } copyright paper51.com

}

http://www.paper51.com

//产生素数的函数的实现

http://www.paper51.com

GeneratePrimeNumbers() copyright paper51.com

{

copyright paper51.com

   CString str;

内容来自论文无忧网 www.paper51.com

   UpdateData(TRUE); http://www.paper51.com

//通过以下两个函数可获得两个大素数,但增加了计算复杂性,为了方便,直接给定素数 内容来自论文无忧网 www.paper51.com

//     m_Prime1 =FindPrime(1); paper51.com

//     m_Prime2 =FindPrime(m_Prime1); copyright paper51.com

   m_Prime1=47; 内容来自论文无忧网 www.paper51.com

   m_Prime2=71; 内容来自论文无忧网 www.paper51.com

} http://www.paper51.com

------分隔线----------------------------
联系方式