安全加密C語言庫OpenSSL奶镶,在Android中服務(wù)器和客戶端之間的簽名驗證和數(shù)據(jù)加密通信等擂煞。
OpenSSL系列文章:
一浆兰、Android CMake輕松實現(xiàn)基于OpenSSL的HmacSHA1簽名
二造寝、Android CMake輕松實現(xiàn)基于OpenSSL的SHA(1-512)簽名
三常摧、Android CMake輕松實現(xiàn)基于OpenSSL的MD5信息摘要&異或加解密
四搅吁、Android CMake輕松實現(xiàn)基于OpenSSL的AES加解密
五、Android CMake輕松實現(xiàn)基于OpenSSL的RSA加解密
六落午、Android CMake輕松實現(xiàn)基于OpenSSL的RSA簽名和驗證
七谎懦、在Retrofit的基礎(chǔ)上結(jié)合OpenSSL實現(xiàn)服務(wù)器和客戶端之間數(shù)據(jù)加密通信
實現(xiàn)原理:
要實現(xiàn)服務(wù)器端和客戶端數(shù)據(jù)加密通信,客戶端可以通過RSA公鑰加密溃斋,服務(wù)器端接收到客戶端數(shù)據(jù)之后界拦,用私鑰進(jìn)行解密就可以獲取到客戶端的明文數(shù)據(jù)。在數(shù)據(jù)傳輸?shù)倪^程中梗劫,即使數(shù)據(jù)暴露了也沒事享甸,因為通過RSA公鑰加密的數(shù)據(jù),只能通過對應(yīng)的私鑰才能解密梳侨,而私鑰只存在于服務(wù)器端蛉威,別人是無法獲取的。但是上文中已經(jīng)講過了猫妙,當(dāng)RSA加解密大量數(shù)據(jù)的時候瓷翻,速度是很慢的,這在服務(wù)器和客戶端之間通信是覺得不允許的割坠。況且有的時候服務(wù)器端返回數(shù)據(jù)的時候也需要進(jìn)行加密處理齐帚,而公鑰是開放的,所以用私鑰加密也就沒有多大意義了彼哼。所以就有了RSA和AES結(jié)合对妄,實現(xiàn)服務(wù)器端和客戶端的安全,高效數(shù)據(jù)加密通信敢朱。
實現(xiàn)過程:
舉個列子說明剪菱,在這只是為了說明服務(wù)器端和客戶端加密通信摩瞎。用戶輸入用戶名和密碼注冊成功之后,返回用戶ID和Token孝常。在此過程中客戶端需要把數(shù)據(jù)加密之后向服務(wù)端發(fā)起請求旗们,同時,服務(wù)器端也要把數(shù)據(jù)進(jìn)行加密之后返回客戶端构灸∩峡剩客戶端通過AES加密用戶名和密碼得到密文A,此時通過AES加密需要秘鑰B喜颁,在這里我們隨機(jī)生成稠氮;然后,用RSA公鑰對此隨機(jī)生成的秘鑰B進(jìn)行加密得到密文C半开。服務(wù)器端接收到的數(shù)據(jù)有用戶名和密碼的密文A隔披、AES秘鑰的密文C;接下來服務(wù)器端就可以通過RSA私鑰解密C得到秘鑰B寂拆,然后通過秘鑰B進(jìn)行AES解密A得到用戶名和密碼的明文奢米。服務(wù)器端通過秘鑰B對用戶ID和Token進(jìn)行加密后返回給客戶端,客戶端接收到數(shù)據(jù)后漓库,通過秘鑰B解密得到原始數(shù)據(jù)恃慧。如果客戶端需要保存此用戶ID的話,可通過AES加密后存儲到SharedPreferences中渺蒿,這里有一個不變的秘鑰痢士,可寫死在.so文件中,提高反編譯門檻茂装。
結(jié)合Retrofit來使用的話怠蹂,可在interceptor中統(tǒng)一封裝加密過程;自定義解析器先解密后再進(jìn)行數(shù)據(jù)解析少态。
下載代碼運行城侧,在控制臺中輸入“body”,將看到所有調(diào)試信息彼妻。歡迎star嫌佑,fork,轉(zhuǎn)載侨歉。