首先介紹一下加密相關的知識:
1、加密分爲對稱加密和非對稱加密
對稱加密:雙方使用同一種加密/解密規則,對信息進行加密和解密。
非對稱加密:一方生成兩把密鑰(公鑰和私鑰),公鑰是公開的,私鑰是保密的;另一方獲取到公鑰,然後用它對信息加密;一方得到加密後的信息,用私鑰解密。
2、RSA加密/解密公式
加密:公鑰(E,N)------> 密文 = (明文^E) mod N
解密:密鑰(D,N)------> 明文 = (密文^D) mod N
一、設計思路
學完網絡課程,學到了網絡傳輸涉及到安全問題,裏面是通過加密算法實現數據的可靠傳輸,由於自己比較喜歡算法的研究,於是就自己結合知識實現了一個非對稱加密算法RSA。
二、設計平臺
windows下vs2013實現RSA。
三、項目內容
一、普通類型(int)的RSA
1、產生兩個素數,隨機產生數字,對產生的數進行素數判斷;
2、兩個素數的乘積產生N,根據歐拉函數求乘積,兩個素數減一的乘積
3、求明文,根據互質的性質,從(1 < E < 乘積值)之間選取一個數使得E與乘積值互質
4、求密文,根據歐拉定理((E * D)mod 乘積值 = 1),即就是求模反元素
5、產生公鑰(E,N),私鑰(D,N)
6、根據加密公式對字符串、文件內容加密(採用快速冪取模運算)
7、根據解密公式對字符串、文件內容解密(採用快速冪取模運算)
二、大數類型的RSA(考慮信息傳遞的安全性,使用boost庫中的大數)
1、使用boost庫的random產生隨機數,使用miller_ranbin算法進行素數判斷
2、求密文,對於大數使用暴力遍歷的方式時間複雜很高,因此需要更快的算法,採用歐幾里得算法--輾轉相除法求密文
四、源碼
一、普通類型
https://github.com/ssh1222/Cplusplus/tree/master/RSA
二、大數
https://github.com/ssh1222/Cplusplus/tree/master/BagRSA
五、結果
1、字符串
2、文件
六、實現RSA使用到的其他算法和定理
1、同餘定理
2、模冪運算
3、歐幾里得定理
4、歐幾里得算法---輾轉相除法
5、擴展的歐幾里得算法