网上都说简单,但是我觉得这个过程事实上还是挺复杂的,这个论述不陈述原因,只陈述过程。
首先明确我们的根本目的:我们是要加密一个信息,再解密一个信息。
加密这个信息的方法
- 找到两个质数p和q,把他们俩乘起来得到n=pq;
- 随便找一个数字e,这个数字要满足 ( e , ϕ ( n ) ) = 1 (e,\phi (n))=1 (e,ϕ(n))=1,这个原因我们之后说。
- 我们得到了一个需要加密的信息m
- 我们把这个加密的信息m进行如下的操作 m e    m o d    n = c m^e \; mod\; n = c memodn=c
- 这个c就是我们得到的加密信息。
- 非常建议手写演示演示这个过程。
加密完了之后,我们就需要解密
- 首先整理我们能够获得的信息有n,c。关于m,我们一无所知。
- 我们可以知道c由这一条方程得来: m e    m o d    n = c m^e \; mod\; n = c memodn=c
- 我们的目标是通过这个方程获得m
- 这个方程可以改写成 m e ≡ c m o d    n m^e \equiv c \mod n me≡cmodn
- 显然c和m^e 可以互换: c ≡ m e m o d    n c\equiv m^e \mod n c≡memodn
- 显然c和m^e 添加一个幂次,对结果没有影响: c d ≡ m e d m o d    n c^d\equiv m^{ed} \mod n cd≡medmodn
- 在这一步中,我们的目标是把m^ed 消掉变成一个m,我们就可以计算出模一个m的值了。
- 回想欧拉定理 m ϕ ( n ) ≡ 1 m o d    n m^{\phi(n)}\equiv 1 \mod n mϕ(n)≡1modn,如果 e d = ϕ ( n ) ed=\phi(n) ed=ϕ(n),那么m就会变成1,如果 e d = ϕ ( n ) + 1 ed=\phi(n)+1 ed=ϕ(n)+1,那么 m e d = m ϕ ( n ) + 1 m^{ed}=m^{\phi (n)+1} med=mϕ(n)+1就可以化成m了。
- 所以我们就可以得到一条方程, e d = k ∗ ϕ ( n ) + 1 ed=k*\phi(n)+1 ed=k∗ϕ(n)+1,这条式子移项 e d − k ∗ ϕ ( n ) = 1 ed-k*\phi(n)=1 ed−k∗ϕ(n)=1得到一个丢番图方程,d和k是未知数,我们可以通过欧几里得算法解得d和k。
- 将d带回5式,则有 c d    m o d    n = m c^d \; mod \; n = m cdmodn=m,m就被解出来了。
大体的感知,还有实际的案例,可以参见知乎的这篇https://www.zhihu.com/question/25038691/answer/81565068