rsa是一種公鑰加密演算法,可用於公鑰加密和數字簽名
rsa加密過程可用下面的公式表達
密文=(明文^e) mod n
rsa的密文等於明文代表數字的e次方除以n 的餘數
整個過程十分簡單,只要知道e,n就能對明文進行加密。所以e,n的組合就是公鑰。寫成「公鑰是」
rsa解密也十分簡單可用下面公式表達:
明文=(密文^d)mod n
所以d,n代表私鑰(由於n是公鑰的一部分,所以也可用說d是私鑰)
下面就介紹如何生成e,d,n
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)
1lgcd(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之間必須存在下列關係:
1le*d mod l=1
求出d 就是擁有了私鑰
準備兩個質數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,所以公鑰是
d*emod l=1 e=5 可用找到d=29
所以私鑰為
1.加密
要加密的明文必須是小於n的數
假設明文為123
密文=123^5 mod 323 =225
2.解密
明文=225^29 mod 323=123
RSA加密演算法
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也不是素數。另一方面,13除了等於13 1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為 質數 二 什麼是 互質數...
RSA加密演算法
演算法的描述 1.選取兩個素數p,q 2.計算n p q,fn p 1 q 1 3.選擇乙個整數e,使得e與fn的最大公約數為1,e將會用於對資料進行加密。4.計算出乙個整數d,使得d e除fn的餘數為1。d用於對密文進行解密,還原出明文。5.假設明文為m,密文為c。如果需要對原文進行加密,則進行如...
RSA加密演算法
一 rsa是公鑰加密演算法之一,該演算法的數學基礎是 1 初等數論的euler定理,即 若整數a與整數n互素,則a n 1 mod n 其中,n 為尤拉函式。2 大整數分解很困難,即給定乙個大整數n,將其分解為n p q,兩個素數乘積十分困難。二 rsa基本原理 1 金鑰的生成。選擇大素數p,q,計...