? ? ? ? RSA算法是公開密鑰系統(tǒng)的代表,其安全性建立 在具有大素數(shù)因子的合數(shù),其因子分解困難這一法則之上的。Rijndael算法作為新一代的高級加密標(biāo)準(zhǔn),運(yùn)行時不需要計算機(jī)有非常高的處理能力和大的內(nèi) 存,操作可以很容易的抵御時間和空間的攻擊,在不同的運(yùn)行環(huán)境下始終能保持良好的性能。這使AES將安全,高效,性能,方便,靈活性集于一體,理應(yīng)成為網(wǎng) 絡(luò)數(shù)據(jù)加密的首選。相比較,因為AES密鑰的長度最長只有256比特,可以利用軟件和硬件實現(xiàn)高速處理,而RSA算法需要進(jìn)行大整數(shù)的乘冪和求模等多倍字 長處理,處理速度明顯慢于AES[5];所以AES算法加解密處理效率明顯高于RSA算法。在密鑰管理方面,因為AES算法要求在通信前對密鑰進(jìn)行秘密分 配,解密的私鑰必須通過網(wǎng)絡(luò)傳送至加密數(shù)據(jù)接收方,而RSA采用公鑰加密,私鑰解密(或私鑰加密,公鑰解密),加解密過程中不必網(wǎng)絡(luò)傳輸保密的密鑰;所以 RSA算法密鑰管理要明顯優(yōu)于AES算法。
? ? ? ?從上面比較得知,由于RSA加解密速度慢,不適合大量數(shù)據(jù)文件加密,因此在網(wǎng)絡(luò)中完全用公開密碼體制傳輸機(jī)密信息是沒有必要,也是不太現(xiàn)實的。AES加密速度很快,但是在網(wǎng)絡(luò)傳輸過程中如何安全管理AES密鑰是保證AES加密安全的重要環(huán)節(jié)。這樣在傳送機(jī) 密信息的雙方,如果使用AES對稱密碼體制對傳輸數(shù)據(jù)加密,同時使用RSA不對稱密碼體制來傳送AES的密鑰,就可以綜合發(fā)揮AES和RSA的優(yōu)點(diǎn)同時避 免它們?nèi)秉c(diǎn)來實現(xiàn)一種新的數(shù)據(jù)加密方案。加解密實現(xiàn)流程如下圖。

? ? ?具體過程是先由接收方創(chuàng)建RSA密鑰對,接收方通過Internet發(fā)送RSA公鑰到發(fā)送方,同時保存RSA私鑰。而發(fā)送方創(chuàng)建AES密鑰,并用該 AES密鑰加密待傳送的明文數(shù)據(jù),同時用接受的RSA公鑰加密AES密鑰,最后把用RSA公鑰加密后的AES密鑰同密文一起通過Internet傳輸發(fā)送 到接收方。當(dāng)接收方收到這個被加密的AES密鑰和密文后,首先調(diào)用接收方保存的RSA私鑰,并用該私鑰解密加密的AES密鑰,得到AES密鑰。最后用該 AES密鑰解密密文得到明文。
AES+RSA結(jié)合最佳實踐
基本要求
保證傳輸數(shù)據(jù)的安全性
保證數(shù)據(jù)的完整性
能夠驗證客戶端的身份
基本流程
請求:
1. 服務(wù)器端(server)和客戶端(client)分別生成自己的密鑰對
2. server和client分別交換自己的公鑰
3. client生成AES密鑰(aesKey)
4. client使用自己的RSA私鑰(privateKey)對請求明文數(shù)據(jù)(params)進(jìn)行數(shù)字簽名
5. 將簽名加入到請求參數(shù)中,然后轉(zhuǎn)換為json格式
6. client使用aesKey對json數(shù)據(jù)進(jìn)行加密得到密文(data)
7. client使用sever的RSA公鑰對aesKey進(jìn)行加密(encryptkey)
8. 分別將data和encryptkey作為參數(shù)傳輸給服務(wù)器端
服務(wù)器端進(jìn)行請求響應(yīng)時將上面流程反過來即可
具體實現(xiàn)流程可做優(yōu)化,例如:client將encryptkey傳輸給服務(wù)器端的方式可以通過HttpHeader來實現(xiàn)。