算法描述
- 选择一对不同的、足够大的素数p,q。
- 计算n=pq。
- 计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
- 找一个与f(n)互质的数e,且1<e<f(n)。
- 计算d,使得d*e≡1 mod f(n)。这个公式也可以表达为d ≡e-1 mod f(n)。
- 公钥KU=(e,n),私钥KR=(d,n)。
- 加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C≡Me(mod n)。
- 解密过程为:M≡Cd(mod n)。
计算示例
计算密钥
p,q取两个不相同的素数,这里令p=3,q=11,得出n=p×q=3×11=33;
f(n)=(p-1)(q-1)=2×10=20;
取e=3,(3与20互质)则e×d≡1 mod f(n),即3×d≡1 mod 20。
通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。因此,可令d=7。
从而我们可以设计出一对公私密钥
加密密钥(公钥)为:KU =(e,n)=(3,33)
解密密钥(私钥)为:KR =(d,n)=(7,33)。
加密计算
按照字母表顺序把字母转化为数字,单词”key“变为11,05,25。
用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C≡Me(mod n)得:
C1=(M1)e (mod n)=113 (mod 33)=11
C2=(M2)e (mod n)=053 (mod 33)=31
C3=(M3)e (mod n)=253 (mod 33)=16
得到加密以后的密文信息为:11,31,16
解密计算
用户B收到密文,若将其解密,只需要计算M≡Cd(mod n)即:
M1=(C1)d (mod n)=117 (mod 33)=11
M2=(C2)d (mod n)=317 (mod 33)=05
M3=(C3)d (mod n)=167 (mod 33)=25
用户B得到明文信息为:11,05,25。根据编码表将其转换为英文,即可得到恢复后的原文“key“。