android請求加密
① Android網路請求加密機制
密碼學的三大作用:加密( Encryption)、認證(Authentication),鑒定(Identification)
加密 :防止壞人獲取你的數據。
鑒權 :防止壞人假冒你的身份。
認證 :防止壞人修改了你的數據而你卻並沒有發現。
1. URLEncode和URLDecoder 作用:URLEncode就是將URL中特殊部分進行編碼。URLDecoder就是對特殊部分進行解碼。
為什麼URL要encode原因呢?
url轉義其實也只是為了符合url的規范而已。因為在標準的url規范中 中文和很多的字元 是不允許出現在url中的。
2. Base64編碼
為什麼要進行Base64編碼?
在計算機中任何數據都是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字元。而在網路上交換數據時,比如說從A地傳到B地,往往要經過多個路由設備,由於不同的設備對字元的處理方式有一些不同,這樣那些不可見字元就有可能被處理錯誤,這是不利於傳輸的。所以就先把數據先做一個Base64編碼,統統變成可見字元,這樣出錯的可能性就大降低了。
應用場景:主要是對於二進制數據進行編碼,(文件、圖片、加密後的二進制數據)
3. 消息認證演算法
要確保加密的消息不是別人偽造的,需要提供一個消息認證碼(MAC,Message authentication code) 。
消息認證碼是帶密鑰的hash函數,基於密鑰和hash函數(單向散列函數)。
密鑰雙方事先約定,不能讓第三方知道。
消息發送者使用MAC演算法計算出消息的MAC值,追加到消息後面一起發送給接收者。
接收者收到消息後,用相同的MAC演算法計算接收到消息MAC值,並與接收到的MAC值對比是否一樣。
消息認證碼的作用:檢查某段消息的完整性,以及作身份驗證。
防止重放 攻擊可以有 3 種方法:
序號
每條消息都增加一個遞增的序號,並且在計算 MAC 值的時候把序號也包含在消息中。這樣攻擊者如果不破解消息認證碼就無法計算出正確的 MAC 值。這個方法的弊端是每條消息都需要多記錄最後一個消息的序號。
時間戳
發送消息的時候包含當前時間,如果收到的時間與當前的不符,即便 MAC 值正確也認為是錯誤消息直接丟棄。這樣也可以防禦重放攻擊。這個方法的弊端是,發送方和接收方的時鍾必須一致,考慮到消息的延遲,所以需要在時間上留下一定的緩沖餘地。這個緩沖之間還是會造成重放攻擊的可趁之機。
nonce
在通信之前,接收者先向發送者發送一個一次性的隨機數 nonce。發送者在消息中包含這個 nonce 並計算 MAC 值。由於每次 nonce 都會變化,因此無法進行重放攻擊。這個方法的缺點會導致通信的數據量增加。
4. 對稱加密演算法
特點:加解密只有一個密鑰。優點:速度快、效率高。缺點:密鑰交換問題。演算法:AES(256位元組,主流)、DES(8位元組,淘汰)。
密鑰交換問題如何解決,MAC同樣也有這個問題,可以使用非對稱加密傳輸,或者私下約定,密鑰管理中心。
5. 非對稱加密
非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密(這個過程可以做數字簽名) 。 非對稱加密主要使用的是RSA演算法。
特點:公/私鑰機制。優點:只需要交換公鑰,安全。缺點:加解密速度慢,特別是解密。演算法:RSA。應用:數字簽名。
數字簽名 :
簡單解釋:
A:將明文進行摘要運算後得到摘要(消息完整性),再將摘要用A的私鑰加密(身份認證),得到數字簽名,將密文和數字簽名一塊發給B。
B:收到A的消息後,先將密文用自己的私鑰解密,得到明文。將數字簽名用A的公鑰進行解密後,得到正確的摘要(解密成功說明A的身份被認證了)。
數字證書 :
6. Android端 AES+RSA結合實踐
基本流程
Android端
伺服器端
基本上如下圖所示的流程:
② Android加密演算法總結
1.概念:
Base64是一種用64個字元(+/)來表示二進制數據的方法,只是一種編碼方式,所以不建議使用Base64來進行加密數據。
2.由來:
為什麼會有Base64編碼呢?因為計算機中數據是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字元。在網路上交換數據時,比如圖片二進制流的每個位元組不可能全部都是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,做一種擴展方案來支持二進制文件的傳送,把不可列印的字元也能用可列印字元來表示,所以就先把數據先做一個Base64編碼,統統變成可見字元,降低錯誤率。
3.示例:
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。缺點是密鑰的傳輸比較麻煩。
1.DES
DES全稱為Data Encryption Standard,即數據加密標准,是一種使用 密鑰加密 的塊演算法。
DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,密鑰事實上是56位參與DES運算(第8、16、24、32、40、48、56、64位是校驗位,使得每個密鑰都有奇數個1)分組後的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。
2.3DES
3DES(或稱為Triple DES)是三重 數據加密演算法 (TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。是DES向AES過渡的加密演算法,它使用3條56位的密鑰對數據進行三次加密。是DES的一個更安全的變形。它以DES為基本模塊,通過組合分組方法設計出分組加密演算法。比起最初的DES,3DES更為安全。
3.AES
AES全稱Advanced Encryption Standard,即高級加密標准,當今最流行的對稱加密演算法之一,是DES的替代者。支持三種長度的密鑰:128位,192位,256位。
AES演算法是把明文拆分成一個個獨立的明文塊,每一個明文塊長128bit。這些明文塊經過AES加密器的復雜處理,生成一個個獨立的密文塊,這些密文塊拼接在一起,就是最終的AES加密結果。
但是這里涉及到一個問題:假如一段明文長度是192bit,如果按每128bit一個明文塊來拆分的話,第二個明文塊只有64bit,不足128bit。這時候怎麼辦呢?就需要對明文塊進行填充(Padding):
AES的工作模式,體現在把明文塊加密成密文塊的處理過程中。
加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。優點是密鑰傳輸方便。
1.SHA
安全散列演算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列演算法。能計算出一個數字消息所對應到的,長度固定的字元串(又稱消息摘要)的演算法,且若輸入的消息不同,它們對應到不同字元串的機率很高。
SHA分為SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512五種演算法,後四者有時並稱為SHA-2。SHA-1在許多安全協定中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的雜湊函數)的後繼者。但SHA-1的安全性如今被密碼學家嚴重質疑;雖然至今尚未出現對SHA-2有效的攻擊,它的演算法跟SHA-1基本上仍然相似;因此有些人開始發展其他替代的雜湊演算法。
2.RSA
RSA演算法1978年出現,是第一個既能用於數據加密也能用於數字簽名的演算法,易於理解和操作。
RSA基於一個數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰,而兩個大素數組合成私鑰。公鑰是可提供給任何人使用,私鑰則為自己所有,供解密之用。
3.MD5
MD5信息摘要演算法 (英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值,用於確保信息傳輸完整一致。具有如下優點:
XOR:異或加密,既將某個字元或者數值 x 與一個數值 m 進行異或運算得到 y ,則再用 y 與 m 進行異或運算就可還原為 x。
使用場景:
(1)兩個變數的互換(不藉助第三個變數);
(2)數據的簡單加密解密。
③ Android 關於 OkHttp 請求對參數進行加解密的封裝
不加密的情況下,數據一般是這樣的(當然,data 也可能是一個列表):
加密的情況下:
這里不強制要求返回類型是 Result,只需要服務端返回的 json 數據的第一層級中有 "data" 欄位即可,取出該欄位進行解密,並重新賦值該欄位,然後再進行解析
interceptor 的方式效率要高點,但是 converter 的枯橡方式要更加靈活點。
這里採用了把 encryptKey 也放在 body 里一起傳輸的方案,所以實現起來有點麻煩;其實也可以選擇把 encryptKey 放沒虧旁在 header 里,然後對 body 整體加解密的方案,這樣實現起來就會空世簡單一些
④ 問一下,給android加密哪些加密方式最好最有效
朋友你好,很高興為你解決問題。
android加密的最佳加密方式可採用安卓應用APK加密工具,一鍵集成DEX加密、SO文件加密、DLL文件加密、內存保護、反調試、防二次打包等功能。
可以有效避免核心代碼被破解,請求協議被偽造,被植入惡意代碼後重打包等諸多安全風 險!
有效五個杜絕:
• 杜絕APP包被植入病毒或廣 告,竊 取用戶隱 私信息,推送垃 圾廣 告;
• 維持應用原有的純凈度和企業信譽度。
• 杜絕競 爭對手逆向分析應用核心技術,竊 取企業勞動成果;
• 杜絕攻 擊者挖掘應用漏洞,發起惡意攻 擊行為。
• 杜絕應用廣 告代碼被刪除,影響經 濟收 益;
• 杜絕應用廣 告代碼被篡改,廣 告收 益被攻 擊者竊取。
希望以上解答能夠幫助到你,參考資料:http://www.kiwisec.com/proct/apkEncrypt.shtml。
祝:開心每一天。
⑤ android 介面數據如何加密
方法步驟如下:
1.選擇要發布的項目,右鍵如下:
7.點擊Finish完成發布,在相應的位置生成兩個文件為:
XX.apk和步驟4所起的文件名。
⑥ Android 的幾種加密方式
Android 中的最常用得到有三種加密方式:MD5,AES,RSA.
1.MD5
MD5本質是一種散列函數,用以提供消息的完整性保護。
特點:
1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的;
2.容易計算:從原數據計算出MD5值很容易;
3.抗修改性:對原數據進行任何改動,哪怕只修改一個位元組,所得到的MD5值都有很大的區別
4.強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(及偽造數據)是非常困難的;
2.RSA加密
RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。
RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。
3.AES加密
AES加密是一種高級加密的標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法。
⑦ Android APP加密方法都有哪些
安卓APP加密的方法主要分成三類:源碼加密、數據安全和應用保護,而每一類又分成好幾個小項。
源碼加密包括:Dex文件保護、防二次打包、so文件保護、資源文件保護。以Dex文件保護為例,Dex文件保護又包括:高級混淆、DEX文件加殼、DEX文件加花、動態類載入、內存防mp。
高級混淆:代碼混淆,可以降低代碼可讀性、縮小包大小。
DEX文件加殼:相當於把源碼打包至其他文件夾下,逆向工具對加密後的dex文件解析,只能看到殼文件,可以防止解包後看到真正的源碼。愛加密利用挖空技術實現函數級加密,安全強度高,啟動效率快。
dex加花:由於大部分逆向工具都是線性讀取位元組碼並解析,當遇到無效位元組碼時就會引起反編譯工具位元組碼解析失敗。愛加密插入無效位元組碼到dex文件之中,同時保證該位元組碼永遠不會被執行,否則程序運行也會崩潰。這樣,就能起到反編譯的作用了。
dex動態類載入:愛加密加固後的dex文件源碼可以動態分離,在運行時,將源碼分段載入到內存當中。
內存防mp:程序運行時會釋放代碼,內存防mp可以防止程序運行時被劫持。
應用安全包括:log日誌輸入屏蔽、應用清場。清場技術依賴於雲端黑名單、白名單DB,應用每次啟動後便自動進行本地的黑名單、白名單DB數據更新,若檢測到有異常情況,則可對用戶進行提示。
數據安全包括:頁面防劫持、本地數據保護、截屏保護、內存數據防查詢、協議加密、虛擬鍵盤。
⑧ android 的加密怎樣做
安卓加密主要通過本地數據文件保護,頁面防釣魚保護,鍵盤監聽保護,截屏保護羨唯和協議加密。源碼安全包括:DEX加花加殼保護,動態指令載入,擾侍資源文件保護,兄李培SO文件保護和內存防mp保護等等。單一的加密方式可能比較簡單,比較容易被破解,但是組合起來效果就會很好。
⑨ Android使用RSA加密和解密
1.data是要加密的數據,如果是字元串則getBytes。publicKey是公鑰,privateKey是私鑰。自定義密鑰對測試
2.從文件中讀取公鑰
當加密的數據過長時,會出現javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes的異常。rsa演算法規定一次加密的數據不能超過生成密鑰對時的keyLength/8-11,keyLength一般是1024個位元組,則加密的數據不能超過117個位元組
測試分段加密和解密
生成公鑰和私鑰後,用base64編碼
一、android加密的數據伺服器上無法解密?
android的rsa加密方式是RSA/ECB/NoPadding,而標准jdk是RSA/ECB/PKCS1Padding,所以加密時要設置標准jdk的加密方式
二、base64編碼。因為不同的設備對字元的處理方式不同,字元有可能處理出錯,不利於傳輸。所以先把數據做base64編碼,變成可見字元,減少出錯
官方提供的base64類,Base64.encode編碼,Base64.decode解碼。用這個會有換行符,需要自定義
三、rsa是非對稱加密演算法。依賴於大數計算,加密速度比des慢,通常只用於加密少量數據或密鑰
四、公鑰加密比私鑰加密塊,公鑰解密比私鑰解密慢。加密後的數據大概是加密前的1.5倍
⑩ Android Okhttp/Retrofit網路請求加解密實現方案
比較安全的方案應該是AES+RSA的加密方式。具體如下圖所示。
為什麼要這樣做呢?
1、RSA是非對稱加密,公鑰和私鑰分開,且公鑰可以公開,很適合網路數據傳輸場景。但RSA加密比較慢,據說比AES慢100倍,且對加密的數據長度也有限制。
2、AES是對稱加密,加密速度快,安全性高,但密鑰的保存是個問題,在網路數據傳輸的場景就很容易由於密鑰泄露造成安全隱患
3、所以,AES+RSA結合才更好,AES加密數據,且密鑰隨機生成,RSA用對方(伺服器)的公鑰加密隨機生成的AES密鑰。傳輸時要把密文,加密的AES密鑰和自己的公鑰傳給對方(伺服器)。對方(伺服器)接到數據後,用自己的私鑰解密AES密鑰,再拿AES密鑰解密數據得到明文。這樣就綜合了兩種加密體系的優點。
4、除上面說的外,還可以加簽名,即對傳輸的數據(加密前)先做個哈希,然後用自己的RSA私鑰對哈希簽名(對方拿到自己的公鑰可以驗簽),這樣可以驗證傳輸內容有沒有被修改過。
就java來說,加密的輸入和輸出都是位元組數組類型的,也就是二進制數據,網路傳輸或本地保存都需要重新編碼為字元串。推薦使用Base64。Android 有自帶的Base64實現,flag要選Base64.NO_WRAP,不然末尾會有換行影響服務端解碼。
Android中Base64加密
總而言之,這些不同語言都有實現庫,調用即可,關鍵是參數要一致,具體還需要和後台聯調一下。
rsa加解密的內容超長的問題解決
現在說到網路框架,應該毫無疑問是Retrofit了。上面說的加密方案說到底還是要在網路請求框架內加上,怎麼做入侵最小,怎麼做最方便才是重點。
1、坑定不能直接在介面調用層做加密,加參數,這樣每個介面都要修改,這是不可能的。
2、ConverterFactory處理,這也是網上可以搜到的很多文章的寫法,但我覺得還是有入侵。而且有點麻煩。
3、OkHttp添加攔截器,這種方法入侵最小(可以說沒有),實現呢也非常優雅。
下面的實現,網上也找不到多少可以參考的文章,但不得不說,OkHttp的封裝和設計真的很好用,所見即所得。看下源碼,就知道該怎麼用了,連文檔都不用查。
主要注意點:
0、和介面無關的新加的數據放在請求頭里。
1、該close的要close,不然會內存泄漏。
2、新舊Request和Response要區分好,新的要替換舊的去傳遞或返回。
3、要對response.code()做處理,只有在和後台約定好的返回碼下才走解密的邏輯,具體看自己的需求,不一定都是200。