首先,要了解3個問題:
1、什麼是「素數」?
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15=3*5,所以15不是素數;又如,12=6*2=4*3,所以12也不是素數。另一方面,13除了等於13*1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為「質數」。
2、什麼是「互質數」(或「互素數」)?
小學數學教材對互質數是這樣定義的:「公約數只有1的兩個數,叫做互質數。」這裡所說的「兩個數」是指自然數。
判別方法主要有以下幾種(不限於此):
(1)兩個質數一定是互質數。例如,2與7、13與19。
(2)乙個質數如果不能整除另乙個合數,這兩個數為互質數。例如,3與10、5與 26。
(3)1不是質數也不是合數,它和任何乙個自然數在一起都是互質數。如1和9908。
(4)相鄰的兩個自然數是互質數。如 15與 16。
(5)相鄰的兩個奇數是互質數。如 49與 51。
(6)大數是質數的兩個數是互質數。如97與88。
(7)小數是質數,大數不是小數的倍數的兩個數是互質數。如 7和 16。
(8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數等等。
3、什麼是模指數運算?
指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有乙個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的餘數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
模指數運算就是先做指數運算,取其結果再做模運算。
進入主題,rsa演算法描述:
(1)選擇一對不同的、足夠大的素數p,q,選擇乙個100到200位的素數
(2)計算n=pq,上面所說的n就等於p和q的乘積。
(3)計算f(n)=(p-1)(q-1),同時對p, q嚴加保密,不讓任何人知道。
(4)找乙個與f(n)互質的數e,且1公鑰私鑰的產生例子:
p:3 , q:11
n:3 × 11 = 33
f(n) = (3-1)(11-1) = 2 × 10 = 20
e:1 < e < 20 ==> 隨機選了3
(d × e)% f(n)= 1
已知e = 3 ,f(n) = 1 =》d 選擇 7 ,也可以選擇更多比如401等等。
公鑰: =>
私鑰: =>
rsa加解密公式:
rsa加密公式
密文 = 明文的e次方對n取模,
將明文自己做e次方,然後將其結果除以n求餘數,這個餘數就是密文。
e和n的組合就是公鑰。
rsa的安全基於:對大數(素數乘積)進行因式分解
e:encrypt(根據特定規則,限定了乙個區間,在這個區間內隨意選的)
n:素數的乘積
rsa解密公式
明文 = 密文的d次方對n取模,
將密文自己做d次方,然後將其結果除以n求餘數,這個餘數就是明文。
d和n的組合就是私鑰。
d:decrypt(只有知道了是哪兩個大素數,才能計算出d)
加解密例子:
以上面的公鑰和私鑰進行加密和解密:
字元表,英文a到z,分別是1到26來表示,我們加密乙個單詞key,則為11,5,25
套用公式
明文加密:
k :11的3次方,對33求餘,加密後等於 11
e :5的3次方,對33求餘,加密後等於 26
y :25的3次方,對33求餘,加密後等於 16
明文key加密後為kzp
密文解密:
k :11的7次方,對33求餘,解密後等於 11
z :26的7次方,對33求餘,解密後等於 5
p :16的7次方,對33求餘,解密後等於 25
密文kzp解密後為key
附:使用openssl工具生成rsa公鑰金鑰的方法
1、安裝openssl工具,配置路徑windows的path。
2、在cmd模式下,進入目標資料夾,執行命令
openssl genrsa -out rsa_private_key.pem 1024
rsa_private_key.pem為檔名,1024為金鑰長度,還可以選2048等,可以不指定。
3、在cmd模式下,還是在目標資料夾,執行命令
openssl rsa -in rsa_private_key.pem -pubout rsa_public_key.pem
通過剛才的私鑰生成對應的公鑰。
加解密演算法總結(RSA)
加 密演算法 通常分為對稱性加密演算法和非對稱性加密演算法 rsa演算法基於乙個十分簡單的數論事實 將兩個大素數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。rsa可以實現的功能 rsa數字簽名機制 用私鑰進行簽名,用公鑰進行驗籤。認為私鑰只有可信任對方一家有...
加解密演算法二 非對稱加解密及RSA演算法的實現
加密和解密使用不同的金鑰的一類加密演算法。這類加密演算法通常有兩個金鑰a和b,使用金鑰a加密資料得到的密文,只有金鑰b可以進行解密操作 即使金鑰a也無法解密 相反,使用金鑰b加密資料得到的密文,只有金鑰a可以解密。這兩個金鑰分別稱為私鑰和公鑰。私鑰就是你個人保留,不能公開的金鑰,而公鑰則是公開給加解...
php服務端AES演算法 RSA加解密示例
話不多說,直接上示例。1 aes演算法加解密 header content type text plain charset utf 8 data error 0 key oscgu3fj8m tdcyvsbehwi91m1fcwvqqwufppodhlfk echo base64 encode op...