RSA演算法,自己的理解!
昨晚看書的時候,看到了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加密演算法加密演算法
- RSA演算法(一)演算法
- RSA演算法原理演算法
- RSA演算法簡介演算法
- 58同城的登入(RSA演算法)演算法
- PHP中RSA加密演算法的使用PHP加密演算法
- JavaScript逆向之RSA演算法JavaScript演算法
- RSA演算法之學習演算法
- 自己對分頁的理解
- 非對稱加密演算法-RSA演算法加密演算法
- RSA演算法與Python實現演算法Python
- python中rsa的RSAPython
- RSA演算法揭秘:加密世界的守護者演算法加密
- RSA演算法原理——(3)RSA加解密過程及公式論證演算法解密公式
- 「Laravel 服務容器」自己的理解Laravel
- 小結自己對BFC的理解
- PHP RSA2 簽名演算法PHP演算法
- 經典加密演算法入門-RSA加密演算法
- Java實現AES和RSA演算法Java演算法
- 自己理解的TCP三次握手TCP
- 密碼學中的RSA演算法與橢圓曲線演算法密碼學演算法
- 公開金鑰演算法-RSA-note演算法
- RSA非對稱加密演算法淺析加密演算法
- 看到BC資料架構系統中的演算法運用後,談談自己對列生成演算法的理解架構演算法
- 如何提升自己對問題的理解深度?
- 作業系統(自己理解)作業系統
- 20.2 OpenSSL 非對稱RSA加解密演算法解密演算法
- iOS-在專案中引入RSA演算法iOS演算法
- 自己對Java中if變數賦值的理解Java變數賦值
- 非對稱加密演算法RSA中的公鑰和私鑰加密演算法
- RSA演算法中,為什麼需要的是兩個素數?演算法
- 我對Kosaraju演算法的理解演算法
- Vue中diff演算法的理解Vue演算法
- php查詢演算法的理解PHP演算法
- React中diff演算法的理解React演算法
- 打造自己的高效能AlphaZero演算法演算法
- 實現自己的Vue Router -- Vue Router原理解析Vue