1. 程式人生 > >RSA加密算法

RSA加密算法

準備 nbsp 次方 進行 滿足 可用 十分 生成密鑰 隨機數生成器

1.什麽是RSA

  RSA是一種公鑰加密算法,可用於公鑰加密和數字簽名

2.RSA加密

RSA加密過程可用下面的公式表達

密文=(明文^E) mod N

RSA的密文等於明文代表數字的E次方除以N 的余數

整個過程十分簡單,只要知道E,N就能對明文進行加密。所以E,N的組合就是公鑰。寫成“公鑰是{E,N}”

3.RSA解密過程

RSA解密也十分簡單可用下面公式表達:

明文=(密文^D)mod N

所以D,N代表私鑰(由於N是公鑰的一部分,所以也可用說D是私鑰)

下面就介紹如何生成E,D,N

4.密鑰對生產

RSA密鑰生成的步驟:

  (1)求N

  (2)求L (L是僅在生成密鑰對的過程中使用的數)、

  (3)求E

  (4)求D

1.求N

  首先找到兩個很大的素數p,q

N=p*q  (如果p,q太小密碼會變得很容易破譯)

2.求L

L是p-1,q-1的最小公倍數用lcm(p-1,q-1)表示

L=lcm(p-1,q-1)

3.求E

E是一個比1大,比L小的數。此外,E和L互質(最大公約數為1)

1<E<L
gcd(E,L)=1

找出gcd(E,L)=1的數,還要使用偽隨機數生成器,生成大於1,小於L的E。再判斷gcd(E,L)是否等於1.可用歐幾裏得輾轉相除法求最大公約數

滿足gcd(E,L)是為了保證一定存在解密所需要的D

求出E,N就生成了公鑰

4.求D

數D由E計算得到。D、E、L之間必須存在下列關系:

1<D<L
E*D mod L=1

求出D 就是擁有了私鑰

5.實踐

準備兩個質數p=17,q=19

N=17*19=323

L=lcm(17-1,19-1)=lcm(16,18)=144

有gcd(E,L)=1 可用得到E=5,7,11,13,17.……

E的選擇有很多,這裏選5,所以公鑰是{E=5,N=323}

D*Emod L=1 E=5 可用找到D=29

所以私鑰為{D=29,N=323}

1.加密

  要加密的明文必須是小於N的數

  假設明文為123

  密文=123^5 mod 323 =225

2.解密

  明文=225^29 mod 323=123

RSA加密算法