rsa算法
-摘自http://tanghuanliang.go.nease.net/ec/rsa.htm# 【程序编程相关:【JSF心得】JAVA的对象传递是引用传】 【推荐阅读:面试时常会问到的问题 】它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解与操作,也很流行.算法的名字以发明者的名字命名:ron rivest, adi shamir 与leonard adleman.但rsa的安全性一直未能得到理论上的证明.它经历了各种攻击,至今未被完全攻破. 【扩展信息:C#使用CDO发送邮件】
假设资料要由a机器传至b机器,那,由b机器用乱数决定一个key,我们称之为privatekey,这个key自始至终都只留在b机器里不送出来然後,由这个privatekey计算出另一个key,我们称之为publickey.这个publickey的特性是几乎不可能反演算出privatekey来然後将这个publickey透过网路丢给a机器.a机器将资料用这个publickey编码,这个编码过的资料一定得使用privatekey才解得开然後a机器将编码过的资料透过网路传给b,b再用privatekey将资料解码这时,如果有第三者窃听资料时,他只得到b传给a的publickey,以及a用这个publickey编码後的资料没有privatekey,第三者根本无法解码所以这个方法确实能防止第三者的窃听
rsa的安全性依赖于大数分解.公钥与私钥都是两个大素数( 大于 100 个十进制位)的函数.据猜测,从一个密钥与密文推断出明文的难度等同于分解两个大素数的积.
密钥对的产生.选择两个大素数,p 与q .计算:
n = p * q
然后随机选择加密密钥e,要求 e 与 ( p - 1 ) * ( q - 1 ) 互质.最后,利用 euclid 算法计算解密密钥d,满足
e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
其中n与d也要互质.数e与 n是公钥,d是私钥.两个素数p与q不再需要,应该丢弃,不要让任何人知道.
加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s ,其中 <= n, s 尽可能的
大.对应的密文是:ci = mi^e ( mod n ) ( a )
解密时作如下计算:
mi =ci^d ( mod n ) ( b )
rsa 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证.... 下一页