一 点睛
用具体数字来实践一下RSA的密钥对的生成、加密和解密的过程。不过,用很大的数计算起来会很困难,因此用较小的数来模拟一下。
二 密钥对生成过程
1 求N
准备两个质数p、q,这里选择17和19,它们都是质数。
p=17 (17是质数)
q=19 (19是质数)
下面求N。N=p*q,因此可以进行如下计算。
N=p*q=17*19=323
2 求L
L是p-1和q-1的最小公倍数。
L=lcm(p-1,q-1)=lcm(16,18)=144
3 求E
E和L的最大公约数必须为1。
gcd(E,L)=1
满足条件的E有很多,例如下面这些数都可以。
5,7,11,13,17,19,23,25,29,31...
这些数称为和L“互质的数”,也就是相对于L是质数的意思。这里选择5作为E。
到此就知道了E=5,N=323,这就是公钥。
4 求D
D必须满足下面条件:
E*D mod L =1
我们来找一找,E乘以几 mod L 等于1呢? D=19可以满足上面的条件,因为:
E*D mod L =5*29 mod 144=145 mod 144 =1
到此,就已经成功生成了密钥对,即:
公钥:(E=5,N=323)
私钥:(D=29,N=323)
公钥(E,N)=(5,323)是可以任意公开的,但是私钥(D,N)=(29,323)必须妥善保存,不能告诉任何人。
5 加密
要加密的明文必须是小于N的数,也就是小于323的数。准确地说,由于解密运算时也需要求mod N,而mod N的结果必定小于N,因此如果明文本身大于N,则解密后无法得到正确的明文。
这里假设要加密的明文是123,加密时使用的是公钥E=5,N=323。
明文的E次方 mod N = 123*123*123*123*123 mod 323=225
因此密文就是225。
6 解密
下面对密文225进行解密。解密时使用的私钥D=29,N=323
密文的D次方 mod N = 225的29次方 mod 323 =123
三 225的29次方 mod 323 的计算过程