RSA的素数运算其实对于当今的计算机来说并不能算什么,运算量大的地方其实在密钥生成的部分,这部分C#作的确实比较好,我曾经使用J#的BigInteger类做过1024位密钥生成(5次洛宾米勒素数检验)需要12-15分钟,后来用C#写的大整数类世间基本就可以忽略不计了。而且随着计算数论的发展,已经有越来越优秀的素数生成算法出现,大素数的生成也就更加容易了。
当然RSA对于比较长的报文流加密性能还是不能和DES,IDEA,或者椭圆曲线加密算法相比,所以它多半是用作签名。前两者是对称密钥,后者也是非对称的。
framework进行了优化
首先看下rsa算法:
找两素数p和q
计算n=p*q和
t=(p-1)*(q-1)
取小于n的一个数e,并且e与t互质,就是最大公约数是1
找一个数d,d满足(ed-1)
mod
t
=0
公钥取(n,e),私钥取(n,d)
现在开始分析,
已知公钥是(n=35,e=5),那么
n=p*q,p与q只能是7和5
那么t就是24
而(ed-1)%t=0
也就是(5d-1)%24=0,那么可以取d为5
所以私钥是
(d=5,n=35)
解密公式:m=c^d
mod
n
=10^5
mod
35
=5
所以明文m是5