参考的网络资源如下:
https://blog.youkuaiyun.com/linuxandroidwince/article/details/81141815
http://bank.hexun.com/2009-06-24/118958531.html
https://baike.baidu.com/item/RSA%E7%AE%97%E6%B3%95/263310?fr=aladdin
算法发明人
Ron Rivest, Adi Shamir, Leonard Adleman.
简介
RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
RSA的安全基于大数分解的难度。其公钥和私钥是一对大质数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大质数之积(这是公认的数学难题)。
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:
数学知识
这个很重要,所以标题放在前面。
考虑到对整体的理解,或者你数学很好根本不需要,内容放在本文最下方。
算法描述(及说明)
(1)首先任意选择两个不相等的质数p和q
(2)计算p和q的乘积n,令p=61, q=53,则n = 61×53 = 3233
3)计算n的欧拉函数φ(n) = (p-1)(q-1) φ(3233)=60×52=3120
4)随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质
在1到3120之间,随机选择了17,e=17。
5)计算e对于φ(n)的模反元素d
根据前面模反元素公式e^φ(N)=e*e^φ(N-1)≡1mod(N),这个公式中的N等于这里的φ(n), 令d=e^φ(N-1), 则ed≡1mod(N),即
ed ≡ 1 (mod φ(n))
这个式子等价于
ed - 1 = kφ(n)
于是,找到模反元素d,实质上就是对下面这个二元一次方程求解
ex + φ(n)y = 1
已知 e=17, φ(n)=3120
17x + 3120y = 1
这个方程可以用”扩展欧几里得算法”求解,此处省略具体的计算过程,有兴趣可以研究下这个算法,算出一组整数解为 (x,y)=(2753,-15),即 d=2753。至此所有计算完成。
6)将n和e封装成公钥&#