1. 程式人生 > >非對稱加密RSA和對稱加密AES,沒你想象的那麼神祕

非對稱加密RSA和對稱加密AES,沒你想象的那麼神祕

  • 客戶端使用RSA + AES對重要資訊進行加密

客戶端加密過程主要分為以下三個步驟

1. 客戶端隨機產生AES的金鑰;

2. 對身份證資訊(重要資訊)進行AES加密;

3. 通過使用RSA對AES金鑰進行公鑰加密。

這樣在傳輸的過程中,即時加密後的AES金鑰被別人擷取,對其也無濟於事,因為他並不知道RSA的私鑰,無法解密得到原本的AES金鑰,就無法解密用AES加密後的重要資訊。

  • 服務端使用RSA + AES對重要資訊進行解密

服務端解密過程主要分為以下兩個步驟:

1. 對加密後的AES金鑰進行RSA私鑰解密,拿到金鑰原文;

2. 對加密後的重要資訊進行AES解密,拿到原始內容。

現實開發中,服務端有時也需要向客戶端傳遞重要資訊,比如登入的時候,返回 token 給客戶端,作為令牌,這個令牌就需要進行加密,原理也是差不多的,比上面多一個步驟而已,就是將解密後的AES金鑰,對將要傳遞給客戶端的資料 token 進行AES加密,返回給客戶端,由於客戶端和服務端都已經拿到同一把AES鑰匙,所以客戶端可以解密服務端返回的加密後的資料。如果客戶端想要將令牌進行儲存,則需要使用自己定義的預設的AES金鑰進行加密後儲存,需要使用的時候傳入預設金鑰和密文,解密後得到 原token。

上面提及到客戶端加密,服務端返回資料不加密的情況,上面說到僅僅使用RSA是可以,但是還是建議同時使用這兩種演算法,即產生一個AES金鑰,使用RSA對該金鑰進行公鑰加密,對重要資訊進行AES加密,服務端通過RSA私鑰解密拿到AES金鑰,再對加密後的重要資訊進行解密。如果僅僅使用RSA,服務端只通過RSA解密,這樣會對於效能會有所影響,原因是RSA的解密速度約等於AES解密資料的100倍,所以如果每個重要資訊都只通過RSA加密和解密,則會影響服務端系統的效能,所以建議兩種演算法一起使用。