RSA演算法,自己的理解!

2021-05-26 00:41:03 字數 1072 閱讀 3959

昨晚看書的時候,看到了rsa的演算法,不是很懂,所以今天早上就早早起來看了關於rsa的書。搞了好久才弄得明白!

rsa演算法的描述:

1.選取足夠大的兩個素數p和q,令n=p*q,則t=(p-1)*(q-1),這裡的t用到的是尤拉定理來算的。

2.選取適當的加密金鑰e和解密金鑰d,使得其滿足e*d≡ 1(mod t)

3.公開的金鑰是n和e,p、d和q要保密。

4.加密運算:e(x)  = x^e mod n

5.解密運算:d(y) =y^d mod n

演算法的介紹就是上面的這些。但是我不明白d是如何確定的。最後我從google中找到了答案。那就是用歐幾里德演算法的擴充套件,用乘法逆元來求得d,首 先我們應該懂得的幾個知識點:歐幾裡徳演算法是求得兩個整數的最大公因子:**(a,d)=**(b,a mod b),這個式子是成立的。也就是說a,b的最大公因子是和b,a mod b的最大公因子一樣。例如:9和6的最大公因子是3,那麼9和3的最大公因子也是3.

同余式:設n是乙個正整數,a,b屬於z,如果a mod n = b mod n,則稱a,b模n同餘,記作:a≡b(mod n)。

乘法逆元:設a,如果存在x,滿足x*a≡1(mod) n,則x是a的模n乘法逆元。

現在我們來看乙個例子:素數47和59,所以n=47*59=2773;t=46*58=2668;現在我們取e=63;現在我們來算一下d;因為e*d≡ 1(mod t),所以可以用乘法逆元求解:2668=42*63+22

63     = 2*22+19

22    = 1*19+3

19    = 6*3+1

則:1=19-(6*3)

=19-(6*(22-19))

=7*19-6*22

=7*(63-2*22)-6*22

=7*63-20*22

=7*63-20(2668-42*63)

=847*63-20*2668

由上可知d=847;最終我們獲得了e=63;d=847;n=2773;

我們對2進行加密:2^63%2773=976;然後解密:976^847/2773=2和我們原來的一樣。

就寫到這裡吧,下回研究怎麼用**實現!!

RSA加密演算法個人理解

rsa加密演算法 引用http www.cfca.com.cn zhishi wz 012.htm 素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也不是素數。另一方面,13除了等於13...

自己封裝Crypto 的RSA類

標頭檔案 pragma once include stdafx.h include include include include include include include rsa.h include hex.h include files.h include rng.h include de...

RSA演算法的使用

private string sendstr send private string receivestr receive region 加密方法 private string encrypt string content 加密方法 傳入要加密的字串 private string encrypt s...