學習筆記 RSA加解密公式及演算法描述

2021-09-26 08:49:58 字數 2412 閱讀 1425

首先,要了解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...