2.3 RSA算法
    RSA公钥加密算法是由麻省理工学院的Ron Rivest, Adi Shamir和Len Adleman在1977年提出的。之所以叫做RSA是分别取自他们三个的名字首字母。由数论中的知识我们知道:两个质数的乘积是很容易求出的,但反过来分解乘积得出两个因子却是极其困难的。RSA算法正是基于这一论断。以下是RSA算法[7]的具体描述:
    (1)设甲用户为接收方,甲选择两个任意质数 和 , , ,其中 和 保密, 作为公钥公开。
    (2)任选一个数 使得 与 互质, 作甲的加密密钥。求数 满足 。其中 作为私钥保密, 作为公钥公开。
    (3)若用户乙想要将信息发送给用户甲,用户乙先将明文数字化为 ,然后做计算 ,其中 和 是用户甲的公钥。
    (4)用户甲接收到乙发来的保密信息后,计算 进行解密,其中 为用户甲的密钥。
RSA密码体制的安全性取决于其加密函数求逆的困难性,即大数因子分解的困难性[8]。虽然至今在理论和实践中还未能证明有分解大整数的有效方法,但大数因子分解未被证明为是NP问题,且随着计算机的计算能力的提高,原来被认为不可能分解的某些大数可能会被成功分解者对RSA密码体制的安全性构成潜在的威胁。因此,RSA的安全性研究成为RSA密码体制研究的一个重要方面,国内外密码学者研究者在这方面都做了很多工作[9][10]。
2.3 数字签名实现算法比较分析
RSA算法既可以用于加密也可以用于数字签名,易于理解和操作。RSA是目前研究和应用最为广泛的非对称公钥算法,在经历了各种各样攻击的考验后逐渐为人们所接受,大多研究人员认为RSA公钥密码体制是目前最优秀的公钥体制之一。RSA算法的密钥与加密、解密算法是分开的,这样使得密钥的分配与管理更为方便[11]。
RSA算法在密钥管理和密钥生成方面优于DSA算法和ECC算法。RSA算法虽然在长消息的签名时的签名长度不如ECC算法但其对网络带宽的要求并不高。RSA算法比较适合计算机网络环境,可以将网上用户的密钥印出在公钥簿上。如果某一用户要与其他用户进行通信,只需要从公钥簿上查阅对方的密钥,用它对自己想要传输的信息进行加密并发出即可。对方在接收到信息后,用对外保密的私钥将信息解密,从而获得报文内容。由上所述RSA算法解决了用户密钥管理的难题并使得公钥密码体制优于对称密码体制。
RSA算法产生密钥的过程很麻烦,因为素数产生技术的限制,它很难做到每次传输用的密钥都不同。其次是RSA算法的速度太慢,由于为了保证安全性,至少也要保证 在600bit以上[12],这样会使运算的代价很高,尤其是运算速度慢;
3 数字签名实现分析
3.1 生成数字签名
生成数字签名的算法:首先是发送者将原文经MD5算法得到原文的消息摘要,然后发送者用自己的私钥对消息摘要进行加密,这样就形成了一个数字签名块。生成签名块的过程中需要输入的数据为消息、发送者的私钥;输出的内容为签名块。主要方法描述如下:
3.1.1 MD5消息摘要计算
//用类lyMD5来表示MD5算法。
public void MD5Update(byte[] input, int inputLen)
//算法的主循环,循环的次数是消息中512位消息分组数目
public String getMD5Digest(String msg) throws Exception
//返回指定String的Digest摘要
String getMD5Digest(File f) throws Exception
//返回指定File的Digest摘要
3.1.2 生成签名
String md5digest=null;
try
{ lyMD5 md5 = new lyMD5(); // 生成lyMD5实例
md5digest =md5.getMD5Digest(待签名文件);
//获得待签名文件MD5消息摘要
上一篇:VB+access高校图书借阅系统的设计与实现
下一篇:ASP.net英语四六级在线报考平台设计与实现

基于Apriori算法的电影推荐

PHP+IOS的会议管理系统的设计+ER图

数据挖掘在电子商务中的应用

数据挖掘的主题标绘数据获取技术与实现

基于PageRank算法的网络数据分析

基于神经网络的验证码识别算法

基于网络的通用试题库系...

国内外图像分割技术研究现状

10万元能开儿童乐园吗,我...

志愿者活动的调查问卷表

AT89C52单片机的超声波测距...

C#学校科研管理系统的设计

公寓空调设计任务书

中国学术生态细节考察《...

医院财务风险因素分析及管理措施【2367字】

神经外科重症监护病房患...

承德市事业单位档案管理...