利用RSA來加密傳輸AES的密鑰,用AES來加密數據,思路如下:
1、客戶端啟動,發送請求到服務端,服務端用RSA算法生成一對公鑰和私鑰,我們簡稱為pubkey1,prikey1,將公鑰pubkey1返回客戶端。
2、客戶端拿到服務端返回的公鑰pubkey1后,自己用RSA算法生成一對公鑰和私鑰,我們簡稱為pubkey2,prikey2,並將公鑰pubkey2利用服務端傳過來的公鑰pubkey1加密,加密后,傳輸給服務端。
4、然后服務端自己再生成 對稱密鑰key,我們取名為aeskey,也就是我們的AES,其實也就是相對於我們配置中的那個16未長度的加密key,生成了這個key以后,我們就用客戶端的公鑰pubkey2進行加密,返回給客戶端。因為被pubkey2加密的數據,只能被客戶端對應的prikey2解密,所以,客戶端拿到密文后,用prikey2進行解密操作,解密完,得到對稱加密AES的密鑰key,最后密鑰key進行數據傳輸加密,至此,整個流程結束。
特點分析:
1、單純的使用非對稱加密方式RSA的話,效率會很低,因為非對稱加密解密方式雖然很保險,但是過程復雜,需要時間長。
2、單純使用對稱加密方式AES的話,太死板,因為這種方式使用的密鑰是一個固定的密鑰,也就是不能改,一旦客戶端或者服務端改的話,就必須通知另一方要改,並且改了后,還需要約定一相同的密鑰。使用起來非常不靈活。並且,有一種極端的情況就是,一旦密鑰被人獲取,那么,我們是無法知道的,我們的所發的每一條數據都會被都對方獲取。
but,AES有個很大的優點,那就是加密解密效率很高,而我們傳輸正文數據時,正號需要這種加解密效率高的;所以這種方式適合用於傳輸量大的數據內容。
3、基於以上兩種特點,所以取其優,就是結合使用;用RSA方式傳輸AES的密鑰,然后客戶端和服務端拿到AES的密鑰后,再進行傳輸正式的內容。這樣既利用了RSA的靈活性,可以隨時改動AES的密鑰;又利用了AES的高效性,可以高效傳輸數據。