圖解RSA非對稱加密


非對稱加密簡介

非對稱加密時目前加密的主流方式之一。因為其保密性備受大家重用。無論是在java、php、go、python等語言中,為了大家方便,或官方自帶、或輪子哥補全,都會有使用非對稱加密的模塊。
得益於各個官方以及輪子哥的幫忙,大家使用費對稱加密可以只需要兩步就可以完成,第一步、自動生成一個“公鑰”,一個匹配的“私鑰”。第二部、傳輸數據,並進行加解密。
表象
但是非對稱加密具體如何實現的呢?
步驟如下:
1、非對稱加密在運行需要暴露私鑰與數據。
如下圖:

用戶獲得公鑰與密文之后,使用公鑰對密文進行解密。即可獲得原始數據。
2、非對稱加密中,使用密鑰進行加密和解密。
如下圖:

用戶無論是在解密密文的時候還是在加密數據的時候,使用的都是公鑰。奇妙的地方在於用戶的“公鑰”與服務器的“私鑰”時不同的。

在公鑰與私鑰不相同的時候,也不需要在傳輸的時候傳輸密鑰。這樣就沒有辦法被竊取服務器的“私鑰”。

並且,使用公鑰時無法解密公鑰加密過的數據的。

公鑰加密的密文,只能被私鑰解密。
作用:所有擁有公鑰的“人”都能讀取服務器發送的信息,但是客戶端發送的信息只有服務器能解讀。

算法

在以上傳輸過程中可以看見,在網絡上存在的數據只有兩類---公鑰與密文。

如果事先約定好公鑰,那么密鑰和公鑰在加解密的時候其實可以完全不暴露。可以做到在互聯網上只存在密文。
具體實現有以下幾個步驟:
1、尋找質數(一般為大質數,這里為了方便理解采用小質數)

P = 3  
Q = 11

2、計算公共模
N = P * Q = 3 * 11 = 33
3、計算歐拉值(RSA的核心算法)
φ(N) = (P-1)(Q-1) = 2 * 10 = 20
4、確定公鑰的取值范圍
1 < E < φ(N)
由於E與φ(N)必須互為質數。所以E可以取值3、7、9、11、13、17、19
為了方便
E=3

5、確定私鑰值
```
E * D % φ(N) = 1
求得私鑰D=7

6、確定公鑰值
C = ME mod N
M隨意取值(默認為大數,這里為了方便,取值2)
注意這里ME不是M*E而是直接組成數字。
推導出公鑰C=8
在開始加解密之前。我們先確定我們手頭擁有的數據有哪些:

1、公鑰C=8。
2、私鑰D=7.
3、公共模數N=33

無需用到到的數
兩個質數 3、11

加解密流程一:
公鑰加密流程
加密字符串2

2^C%N=密文 => 2^8%33=8

私鑰解密
從網絡拿到密文8
8^D%N=明文 => 8^7%33=2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM