小弟我根据另外一篇已有RSA算法程序的基础上,对其关键部分进行了三处重要的修改,从而进一步完善RSA算法,详细说明如下:
一、RSA算法的核心是要生成两个大素数,所以我将上文中的输入素数,改为自动生成两个大素数。并将公钥和密钥也改为自动生成,增强代码的可利用性和可操作性,方便用户演示。
二、由于RSA算法的运算中,需要大量的mod运算。比如:加密:C=M^e(%n) 解密:M=(C^d)%n. 由于数字巨大,如果用常规的存储类型,比如int,long型,在计算过程中,如果公钥或密钥过长,会产生溢出,导致程序错误。所以,我采用了Java中的BingInteger类来存储数据并进行相应运算,利用BigInteger类中已有的多种方法(详见Java API Doc),可以很好的解决以上问题。
三、利用私钥进行加密数据,公钥进行解密数据,实现数字签名并进行验证。当然,这种做法仅限于演示,不能用于真正的商业运用。原因是,RSA算法速慢,一般不直接对大量数据进行加密签名,而是结合其它算法比如md5等,对md5算法产生的信息摘要进行加密而不直接对明文加密。从而一方面提高了安全性,另一方面极大地提高了速度。
代码我放在http://download.youkuaiyun.com/source/480334#aa感兴趣的可以去看看,谢谢了