在服務(wù)器與終端設(shè)備進(jìn)行HTTP通訊時(shí),常常會(huì)被網(wǎng)絡(luò)抓包、反編譯(Android?APK反編譯工具)等技術(shù)得到HTTP通訊接口地址和參數(shù)。為了確保信息的安全,我們采用AES+RSA組合的方式進(jìn)行接口參數(shù)加密和解密。
1.關(guān)于RSA加密機(jī)制:公鑰用于對(duì)數(shù)據(jù)進(jìn)行加密,私鑰對(duì)數(shù)據(jù)進(jìn)行解密,兩者不可逆。公鑰和私鑰是同時(shí)生成的,一一對(duì)應(yīng)。比如:A擁有公鑰,B擁有公鑰和私鑰。A將數(shù)據(jù)通過(guò)公鑰進(jìn)行加密后,發(fā)送密文給B,B可以通過(guò)私鑰和公鑰進(jìn)行解密。
2.AES加密也叫對(duì)稱(chēng)加密:A用密碼對(duì)數(shù)據(jù)進(jìn)行AES加密后,B用同樣的密碼對(duì)密文進(jìn)行AES解密。
?具體操作方法:
1.在終端中采用openssl方式輸入密鑰的相關(guān)屬性(公司名、郵箱等),然后在終端當(dāng)前所在的地址下,生成公鑰和私鑰共7個(gè)文件(7個(gè)文件如何使用請(qǐng)看附錄的拓展了鏈接)。
2.此時(shí)假設(shè)Android客戶(hù)端擁有公鑰PublicKey,服務(wù)器端擁有公鑰PublicKey和私鑰PrivateKey。
3.安卓發(fā)送請(qǐng)求到服務(wù)器端:安卓隨機(jī)生成Byte[]隨機(jī)密碼,假設(shè)RandomKey=“123456”,通過(guò)AES算法,對(duì)Json數(shù)據(jù)利用進(jìn)行加密。
4.但是此刻服務(wù)器并不知道客戶(hù)端的RandomKey是什么,因此需要同時(shí)將Randomkey傳給服務(wù)器,否則服務(wù)器無(wú)法通過(guò)AES對(duì)Json數(shù)據(jù)進(jìn)行解密。但是如果直接發(fā)送請(qǐng)求,Randomkey就會(huì)暴露,所以要對(duì)RandomKey進(jìn)行不可逆的RSA加密。
5.安卓將使用Randomkey進(jìn)行AES加密的Json數(shù)據(jù),和使用PublicKey進(jìn)行RSA加密的RandomKey通過(guò)HTTP傳送到服務(wù)器端。數(shù)據(jù)請(qǐng)求工作完成。
6.服務(wù)器端接收到AES加密的Json數(shù)據(jù)和Rsa加密的RandomKey數(shù)據(jù)。
7.服務(wù)器通過(guò)私鑰PrivateKey對(duì)加密后的RandomKey進(jìn)行Rsa解密。得到安卓生成的原始Randomkey。
8.利用原始的RandomKey對(duì)加密后的Json數(shù)據(jù)進(jìn)行AES對(duì)稱(chēng)解密。至此已經(jīng)得到安卓端發(fā)過(guò)來(lái)的原始Json數(shù)據(jù)。進(jìn)行常規(guī)的服務(wù)器業(yè)務(wù)操作,然后將返回?cái)?shù)據(jù)通過(guò)安卓端的RandomKey進(jìn)行AES加密gouhou后,Response返回。
9.安卓端接收到Response的數(shù)據(jù)后,利用之前本地生成的RandomKey直接進(jìn)行AES解密即可。
詳細(xì)的流程圖可以查看下圖。

注意事項(xiàng):
1.在實(shí)際的開(kāi)發(fā)過(guò)程中,發(fā)現(xiàn)RSA和AES有不同的密文生成標(biāo)準(zhǔn),會(huì)不兼容IOS。IOS在RSA算法中需要的公鑰與JAVA不同。詳細(xì)的解決方案請(qǐng)查看:http://www.cnblogs.com/makemelike/articles/3802518.html
2.AES加密不可以使用超過(guò)128Byte的KEY,因?yàn)樵趈dk1.7以上的版本不支持超過(guò)128Byte的KEY。
小結(jié):從性能上來(lái)測(cè),整個(gè)客戶(hù)端送加密數(shù)據(jù)開(kāi)始到解密得到回傳的原始數(shù)據(jù)不超過(guò)300ms(Iphone4和Centos Java服務(wù)器傳輸測(cè)試)。本方案沒(méi)有采用TOKEN的方式,或許以后用到。公鑰如何更新也需要繼續(xù)完善。
附:具體的JAVA和IOS加密解密Demo遲點(diǎn)整理給出。