Android數(shù)據(jù)加密方案

很多人都知道Android數(shù)據(jù)需要加密,畢竟反編譯、抓包,你懂的,可是有時候不知道從何入手,比如菜鳥的我,經(jīng)過這幾天的折騰之后,我整理了一些思路,有不對的地方,還請多多指點。

1、混淆文件:這個比較簡單,不知道如何混淆的,推薦?? http://www.lxweimin.com/p/f3455ecaa56e

2、加固:APP上線之前最好做一下加固,常用的有:360加固寶,愛加密等

3、HTTPS:現(xiàn)在很多APP都用HTTPS作為網(wǎng)絡傳輸?shù)谋WC,防止中間人攻擊,提高數(shù)據(jù)傳輸?shù)陌踩裕ㄓ肦etrofit的網(wǎng)絡請求框架的,要加上HTTPS也不是什么難事,推薦 http://www.lxweimin.com/p/16994e49e2f6 ,這里說的HTTPS是指自簽的)

4、如果你沒用HTTPS的話,為了確保傳輸安全,還需對傳輸?shù)臄?shù)據(jù)進行加密,這里我推薦用AES+RSA進行加密,(不知道這兩種加密算法的自行百度一下,了解一下原理),我畫了一張流程圖:


數(shù)據(jù)加密流程.png

?具體過程:是先由服務器創(chuàng)建RSA密鑰對,RSA公鑰保存在安卓的so文件里面,服務器保存RSA私鑰。而安卓創(chuàng)建AES密鑰(這個密鑰也是在so文件里面),并用該AES密鑰加密待傳送的明文數(shù)據(jù),同時用接受的RSA公鑰加密AES密鑰,最后把用RSA公鑰加密后的AES密鑰同密文一起通過Internet傳輸發(fā)送到服務器。當服務器收到這個被加密的AES密鑰和密文后,首先調(diào)用服務器保存的RSA私鑰,并用該私鑰解密加密的AES密鑰,得到AES密鑰。最后用該AES密鑰解密密文得到明文。(用Retrofit的網(wǎng)絡請求框架的,要加密參數(shù)和解密服務器傳輸過來的數(shù)據(jù)需自定義Converter,推薦http://blog.csdn.net/zr940326/article/details/51549310

5、so文件:ndk開發(fā)的so,可以存放一些重要的數(shù)據(jù),如:密鑰、私鑰、API_KEy等,不過這里我建議大家使用分段存放,C層(so文件)+String文件(string.xml)+gradle文件,用的時候再拼接合并,還有如上圖所示,AES的加密算法是放在C層進行實現(xiàn)的,這樣也是最大程度保護我們數(shù)據(jù)的安全
Q:公鑰傳輸是否有安全問題?(RSA key)R:固定key,也就是保存在so文件中,理論上不會不安全,當然也可以動態(tài)從服務器獲取,但傳輸不安全(前提不是https)
Q:AES key存儲在哪里比較好?R:分段存放,C層(so文件)+String文件(string.xml)+gradle文件;也可以從服務獲取
我覺得思路、方案是最重要的,代碼實現(xiàn)相對來說還是比較容易的!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容