RSA算法详细计算步骤(简单,纯干货)

网上都说简单,但是我觉得这个过程事实上还是挺复杂的,这个论述不陈述原因,只陈述过程。
首先明确我们的根本目的:我们是要加密一个信息,再解密一个信息

加密这个信息的方法
  1. 找到两个质数p和q,把他们俩乘起来得到n=pq;
  2. 随便找一个数字e,这个数字要满足 ( e , ϕ ( n ) ) = 1 (e,\phi (n))=1 (e,ϕ(n))=1,这个原因我们之后说。
  3. 我们得到了一个需要加密的信息m
  4. 我们把这个加密的信息m进行如下的操作 m e    m o d    n = c m^e \; mod\; n = c memodn=c
  5. 这个c就是我们得到的加密信息。
  6. 非常建议手写演示演示这个过程。
加密完了之后,我们就需要解密
  1. 首先整理我们能够获得的信息有n,c。关于m,我们一无所知。
  2. 我们可以知道c由这一条方程得来: m e    m o d    n = c m^e \; mod\; n = c memodn=c
  3. 我们的目标是通过这个方程获得m
  4. 这个方程可以改写成 m e ≡ c m o d    n m^e \equiv c \mod n mecmodn
  5. 显然c和m^e 可以互换: c ≡ m e m o d    n c\equiv m^e \mod n cmemodn
  6. 显然c和m^e 添加一个幂次,对结果没有影响: c d ≡ m e d m o d    n c^d\equiv m^{ed} \mod n cdmedmodn
  7. 在这一步中,我们的目标是把m^ed 消掉变成一个m,我们就可以计算出模一个m的值了。
  8. 回想欧拉定理 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了。
  9. 所以我们就可以得到一条方程, e d = k ∗ ϕ ( n ) + 1 ed=k*\phi(n)+1 ed=kϕ(n)+1,这条式子移项 e d − k ∗ ϕ ( n ) = 1 ed-k*\phi(n)=1 edkϕ(n)=1得到一个丢番图方程,d和k是未知数,我们可以通过欧几里得算法解得d和k。
  10. 将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

你可能感兴趣的:(算法)