最近的項目中用到了rsa加密算法,在實現了相關功能之后,我去了解了一下rsa相關原理,於是就寫了這篇博客啦。
首先介紹一下什么是rsa加密算法:
作為非對稱加密算法的老大,rsa號稱是地球上最安全的加密算法。
首先了解一些數學背景(我發現我真的好喜歡看數學概念0.0),這里就不再贅訴相關數學背景了,但是請務必要理解這些概念,貼一個我覺着講得特別清晰的概念,便於理解:
https://blog.csdn.net/u014044812/article/details/80782448
然后介紹一下rsa密鑰生成過程:
1.隨機選兩個不等的質數p和q:
實際應用中如果這兩個質數越大就越難破解
2.計算p和q的乘積n
n=p*q n的長度就是密鑰長度,然后把n寫成二進制,共有多少位,這個密鑰就有多少位, 在一般場景中rsa密鑰一般是1024位,重要場合位2048位
3.計算n的歐拉函數φ(n)
4.隨機選擇一個整數e,條件是1<e<φ(n),且e與φ(n)互質
5.計算e對於φ(n)的模反元素d
ed-kφ(n)=1
(可以利用輾轉相除法求的d元素,)
按照公式,d=x=-367,但是一般取正整數,然后d加減φ(n)的n倍都是e的模反元素 所以取d=d+kφ(n)=-367+1x3120=2753
6.將n和e封裝成公鑰,n和d封裝成私鑰
公鑰:(n,e)
私鑰:(n,d)
利用JSEncrypt實現的整個加密過程,具體實現可以看看
https://github.com/travist/jsencrypt
我司現在后端用java實現的解密過程,我現在在前端實現加密過程,列舉部分代碼