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

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