RSA演算法,自己的理解!

xi4ojie發表於2011-03-12

昨晚看書的時候,看到了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和我們原來的一樣。

 

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

相關文章