将RSA 算法反向使用(私钥加密公钥解密),对消息摘要加密,可以实现数字签名的功能。这里通过筛选法求素数, 选择素数编号(3和7)后得到素数5和17,生成公钥(85,3),私钥(85,43),通过加密数字80,得到密文45,明文80。
这里信息摘要函数(Hash函数)对字符串lly进行MD5计算,得到消息摘要MD:c2566a313284b796abcb658e6fc31f16。
数字签名的理论实现流程,数字签名,就是通过在数据单元上附加数据,或对数据单元进行加密变换,从而使接收者可以确认数据来源和完整性。数字签名是防止他人对传输的文件进行破坏,以及确定发信人的身份的手段。数字签名中的加密算法就是应用的RSA加密原理,而它的验证算法则是应用的RSA解密原理。
3.3.4 验证数字签名的设计与实现
验证数字签名的正确与成功性,主要是比较得到的两次消息摘要是否一样,如果验证方用签名方的公钥解密得到消息摘要(即是本设计中得到的解密信息)和他自己计算得到的消息摘要(在本系统中为第一次计算得到的消息摘要)是一样的,则证明签名是正确的,没有被篡改或是冒充,验证签名的原理则是根据RSA的解密算法。得到的解密信息是:c2566a313284b796abcb658e6fc31f16。与消息摘要一样,证明签名正确。
3.3.5运行结果
在本代码中得到二个消息摘要:根据写入的消息(明文信息)计算出来的消息摘要、解密数字签名得到的消息摘要(即是本设计中的解密信息)。如果两个消息摘要是一样的则证明RSA数字签名者的身份的真实性,从而实现了RSA数字签名。该系统的运行结果如图3-5所示。产生的消息摘要和解密得到的消息摘要(在此处是解密信息)是完全一样的,则证明了数字签名的真实性。