那么如何生成一对神奇的公钥和私钥呢,原理如下:
第一步,随机选择两个不相等的质数p和q。比如61和53。(实际应用中,这两个质数越大,就越难破解。)
第二步,计算p和q的乘积n。本例中n = 61×53 = 3233。n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
第三步,计算n的欧拉函数φ(n)。根据公式:φ(n) = (p-1)(q-1),本例中φ(3233)=60×52=3120。
第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质(也即他们的公约数只有1)。本例在1~3120中随机选择了17。(实际应用中,常常选择65537。)
第五步,计算e对于φ(n)的模反元素d。所谓“模反元素”就是指有一个整数d,可以使得ed被φ(n)除的余数为1。实质上就是对下面这个二元一次方程求整数解。
代码: 全选
ex + φ(n)y = 1代码: 全选
17x + 3120y = 1至此所有计算完成。
第六步,将n和e封装成公钥,n和d封装成私钥。本例中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。
公钥和私钥的用法:
(1)加密要用公钥 (n,e)
如果要发送信息m,就用接收方发来的公钥 (n,e) 对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。所谓”加密”,就是算出下式的c:
代码: 全选
m^e ≡ c (mod n)代码: 全选
65^17 ≡ 2790 (mod 3233)(2)解密要用私钥(n,d)
接到密文2790以后,接收方用自己的私钥(3233, 2753) 进行解密。可以证明,下面的等式一定成立:
代码: 全选
c^d ≡ m (mod n)代码: 全选
2790^2753 ≡ 65 (mod 3233)至此,”加密–解密”的整个过程全部完成。
http://blog.jobbole.com/42699/
更神奇的是,这个加密算法不但完成文件的加密解密,还能完成电子签名。也即发送方也可以生成自己的一对公钥和密钥,并把公钥发给接收方,发送方在发送密文的同时,也用自己的私钥(注意是私钥,不是公钥)加密一段签名,接收方收到发送方的签名密文后,用先前收到的发送方公钥解密,就可以唯一地确定发送方没问题,因为如果签名被伪造,那么用他的公钥无法完成解密。
实际的用法还要复杂一些,具体如下:
http://www.cnblogs.com/jackyrong/archiv ... 72945.html1)客户A准备好要传送的数字信息(明文)。
2)客户A对数字信息进行哈希(hash)运算(一种得到数字指纹的算法,一段文字只能得到唯一的hash值,且改动原文任何一点点就会完全改变hash值,无法伪造),得到一个信息摘要。
3)客户A用自己的私钥(SK)对信息摘要进行加密得到客户A的数字签名,并将其附在数字信息上。
4)客户A随机产生一个加密密钥(DES密钥),并用此密钥对要发送的信息进行加密,形成密文。
5)客户A用双方共有的公钥(PK)(此公钥是银行B的)对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给乙。
6)银行B收到客户A传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。
7)银行B然后用DES密钥对收到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。
8)银行B用双方共有的公钥(PK)(此公钥是客户A的)对客户A的数字签名进行解密,得到信息摘要。银行B用相同的hash算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。
9)银行B将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
可见,由于该加密技术有正文必须短于公钥长度的限制,所以在以上的实际应用中是对加密正文的DES密钥进行加密,接收方解密得到DES密钥,再用它对正文进行解密。这就突破了正文不得长于公钥的限制。需要加密的正文中的字母和字符要先转换为ASCII码。
这个加密算法的核心是公钥那一对数字巨大无比的质因子p和q!如果在有效的时间内没法对公钥进行因子分解,找不到p和q,就没法破解密文。不久的将来,量子计算机可以在有效的时间内对公钥大数完成因子分解,就可以破解这个算法。所以,量子计算机是这个算法的克星。
走好,RSA!