1,找两个很大的素数(质数)P 和 Q,越大越好,比如 100 位长的, 然后计算它们的乘积
N=P×Q,M=(P-1)×(Q-1)。
2,找一个和 M 互素的整数 E,也就是说 M 和 E 除了 1
以外没有公约数。
3,找一个整数 D,使得 E×D 除以 M 余 1,即 E×D mod M =
1。
现在,世界上先进的、最常用的密码系统就设计好了,其中 E 是公钥谁都可以用来加密,D 是私钥用于解密,一定要自己保存好。乘积 N
是公开的,即使敌人知道了也没关系。
现在,我们用下面的公式对 X 加密,得到密码 Y。
好了,现在没有密钥
D,神仙也无法从 Y 中恢复 X。如果知道 D,根据费尔马小定理,则只要按下面的公式就可以轻而易举地从 Y 中得到 X。
P=5 Q =7
N= 5 *7 =35
M = 4 *6 =24
选择E =11
D 可以 为 11 35 59
对 1-20 加密 =myMOD( A1,11,35)
1 | 1 |
2 | 18 |
3 | 12 |
4 | 9 |
5 | 10 |
6 | 6 |
7 | 28 |
8 | 22 |
9 | 4 |
10 | 5 |
11 | 16 |
12 | 3 |
13 | 27 |
14 | 14 |
15 | 15 |
16 | 11 |
17 | 33 |
18 | 2 |
19 | 24 |
20 | 20 |
解密使用 D=59 =myMOD( B1,59,35)
1 | 1 |
18 | 2 |
12 | 3 |
9 | 4 |
10 | 5 |
6 | 6 |
28 | 7 |
22 | 8 |
4 | 9 |
5 | 10 |
16 | 11 |
3 | 12 |
27 | 13 |
14 | 14 |
15 | 15 |
11 | 16 |
33 | 17 |
2 | 18 |
24 | 19 |
20 | 20 |
Function myMod(a As Integer, i As Integer, m As Integer) As Integer
myMod = 1
For j = 1 To i myMod = myMod * a
While myMod > m
myMod = myMod - m
Wend
Next j
End Function