RSA演算法詳細計算步驟(簡單,純乾貨)

2021-09-12 08:35:29 字數 1589 閱讀 4225

網上都說簡單,但是我覺得這個過程事實上還是挺複雜的,這個論述不陳述原因,只陳述過程。

首先明確我們的根本目的:我們是要加密乙個資訊,再解密乙個資訊

加密這個資訊的方法

找到兩個質數p和q,把他們倆乘起來得到n=pq;

隨便找乙個數字e,這個數字要滿足(e,

ϕ(n)

)=

1(e,\phi (n))=1

(e,ϕ(n

))=1

,這個原因我們之後說。

我們得到了乙個需要加密的資訊m

我們把這個加密的資訊m進行如下的操作mem

odn=

cm^e \; mod\; n = c

memodn

=c這個c就是我們得到的加密資訊。

非常建議手寫演示演示這個過程。

加密完了之後,我們就需要解密

首先整理我們能夠獲得的資訊有n,c。關於m,我們一無所知。

我們可以知道c由這一條方程得來: mem

odn=

cm^e \; mod\; n = c

memodn

=c我們的目標是通過這個方程獲得m

這個方程可以改寫成me≡

cmod

nm^e \equiv c \mod n

me≡cmo

dn顯然c和m^e 可以互換:c≡m

emod

nc\equiv m^e \mod n

c≡memo

dn顯然c和m^e 新增乙個冪次,對結果沒有影響:cd≡

medm

od

nc^d\equiv m^ \mod n

cd≡med

modn

在這一步中,我們的目標是把m^ed 消掉變成乙個m,我們就可以計算出模乙個m的值了。

回想尤拉定理mϕ(

n)≡1

modn

m^\equiv 1 \mod n

mϕ(n)≡

1mod

n,如果ed=

ϕ(n)

ed=\phi(n)

ed=ϕ(n

),那麼m就會變成1,如果ed=

ϕ(n)

+1

ed=\phi(n)+1

ed=ϕ(n

)+1,那麼med

=mϕ(

n)+1

m^=m^

med=mϕ

(n)+

1就可以化成m了。

所以我們就可以得到一條方程,ed=

k∗ϕ(

n)+1

ed=k*\phi(n)+1

ed=k∗ϕ

(n)+

1,這條式子移項ed−

k∗ϕ(

n)=1

ed-k*\phi(n)=1

ed−k∗ϕ

(n)=

1得到乙個丟番圖方程,d和k是未知數,我們可以通過歐幾里得演算法解得d和k。

將d帶回5式,則有cdm

odn=

mc^d \; mod \; n = m

cdmodn

=m,m就被解出來了。

大體的感知,還有實際的案例,可以參見知乎的這篇

RSA演算法簡單例項

1 選擇一對不同的 足夠大的素數p,q。2 計算n pq。3 計算f n p 1 q 1 同時對p,q嚴加保密,不讓任何人知道。4 找乙個與f n 互質的數e,且1 取p 3 q 11 則 n pq 33 f n p 1 q 1 20,在1到20中取e與20互質,取e 3 也可以取其他 d 3 1 ...

詳細介紹匈牙利演算法步驟

這篇部落格介紹了匈牙利演算法的操作步驟,不討論原理。作用解決指派問題。所謂的指派問題就比如 甲乙丙三個人去做abc三件事情。每個人做每件事情所花的時間可能不一樣。每個人只能安排一件事情,問怎樣安排才能使三個人所工作的時間之和最小?擴充套件成 n 個人 n 件事也可以,但要求是 例項 甲乙丙中第i i...

A 演算法計算步驟總結

a 演算法計算步驟總結 1,從點a開始,並且把它作為待處理點存入乙個 開啟列表 儘管現在列表裡只有乙個元素,但以後就會多起來。你的路徑可能會通過它包含的方格,也可能不會,這是乙個待檢查方格的列表。2,尋找a點周圍所有可到達或者可通過的方格,跳過有牆,水,或其他無法通過地形的方格。也把他們加入開啟列表...