android網路請求加密
A. android中發送網路請求的技術有哪些
Get方式:
[java] view plain
// Get方式請求
public static void requestByGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// 開始連接
urlConn.connect();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_GET, "Get方式請求成功,返回數據如下:");
Log.i(TAG_GET, new String(data, "UTF-8"));
} else {
Log.i(TAG_GET, "Get方式請求失敗");
}
// 關閉連接
urlConn.disconnect();
}
Post方式:
[java] view plain
// Post方式請求
public static void requestByPost() throws Throwable {
String path = "https://reg.163.com/logins.jsp";
// 請求的參數轉換為byte數組
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
byte[] postData = params.getBytes();
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// Post請求必須設置允許輸出
urlConn.setDoOutput(true);
// Post請求不能使用緩存
urlConn.setUseCaches(false);
// 設置為Post請求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
// 配置請求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
// 開始連接
urlConn.connect();
// 發送請求參數
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_POST, "Post請求方式成功,返回數據如下:");
Log.i(TAG_POST, new String(data, "UTF-8"));
} else {
Log.i(TAG_POST, "Post方式請求失敗");
}
}
org.apache.http包中的HttpGet和HttpPost類
Get方式:
[java] view plain
// HttpGet方式請求
public static void requestByHttpGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建HttpGet對象
HttpGet httpGet = new HttpGet(path);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpGet);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpGet方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpGet方式請求失敗");
}
}
Post方式:
[java] view plain
// HttpPost方式請求
public static void requestByHttpPost() throws Exception {
String path = "https://reg.163.com/logins.jsp";
// 新建HttpPost對象
HttpPost httpPost = new HttpPost(path);
// Post參數
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "helloworld"));
params.add(new BasicNameValuePair("pwd", "android"));
// 設置字元集
HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
// 設置參數實體
httpPost.setEntity(entity);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpPost);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpPost方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpPost方式請求失敗");
}
}
B. android網路請求的幾種方式有哪些有什麼不同
普遍Get,Post兩種方式
get請求,比如我現在登錄了網址在看你的問題,網址如下:
http://..com/question/1434459787701892939.html??entry=qb_ihome_tag (?後面這個就是欄位)
這段網址是Get請求 它將表單內各個欄位與其內容放置在HTML HEADER內一起傳送
也就是以明文的形式顯示
Post請求的這些欄位將會以字元集的形式設置到你的請求中也就是密文
這些內容不會顯示在你輸入的網址中
(HttpURLConnection)
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "helloworld"));
params.add(new BasicNameValuePair("pwd", "android"));
// 設置字元集
HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
// 設置參數實體
xx.setEntity(entity);
http://blog.csdn.net/zuolongsnail/article/details/6373051 具體可以他的博客
C. android怎麼保證用戶名密碼安全
如果是保存在本地資料庫,在設置裡面修改用戶密碼通常會有一個設置,那就更新本地資料庫里的密碼。
如果你的帳號信息是保存在服務端的,把新密碼提交到服務端就好了
在該Activity中用map或者namevalue裝載修改的密碼和其他必須的參數android開發中,更新資料庫,用戶的密碼肯定是放在伺服器端的資料庫中的,寫個非同步任務類。)。至於密碼類型長度這些要求的判斷最好直接在裝載數據前就判斷。手機端只是一個請求。如果伺服器端都不允許你修改密碼,這一點毫無疑問,然後進行更新。若要實現用戶密碼的修改,那麼原理就是根據用戶注冊時返回的userid(通常用sharedpreference用戶手機本地文件中)來查詢伺服器端的資料庫中該用戶的賬號密碼數據,首先伺服器端必須要有用戶修改密碼的埠,那麼這一功能根本不可能實現。
若是伺服器端允許用戶修改密碼,伺服器讀取用戶請求。用戶發出修改密碼這樣的請求後,更多的操作要放在伺服器端。大致是,寫好用戶修改密碼的頁面之後,伺服器根據用戶提交的信息對資料庫更新,然後在提交按鈕的的監聽事件里發送請求至伺服器(當然發送請求獲取數據這些操作別放進主線程。
詳細做法無法贅述,減輕伺服器壓力
寫一個設置界面,設置修改密碼的按鈕然後添加事件不就好了
D. Android 客戶端如何防止網路監控抓取數據
加密啊。安裝包,代碼,網路請求等等,許多方式做加密來保證軟體安全。
E. 安卓短使用了AES加密 服務端是servlet 以前發送請求的時候是name=小明&age=12
隨著密碼分析技術的提高,新的數據加密標准AES取代了過時的DES。文章在闡述AES/RSA加密演算法的基礎上,分別給出了利用AES/RSA實現客戶端/伺服器端網路數據傳輸的加密流程。最後在比較AES演算法和RSA演算法基礎上,將AES與RSA相結合提出一種新的數據加密方案。
基本需求及概念
隨著Internet網的廣泛應用,信息安全問題日益突出,以數據加密技術為核心的信息安全技術也得到了極大的發展。目前的數據加密技術根據加密密鑰類型可分私鑰加密(對稱加密)系統和公鑰加密(非對稱加密)系統[1]。對稱加密演算法是較傳統的加密體制,通信雙方在加/解密過程中使用他們共享的單一密鑰,鑒於其演算法簡單和加密速度快的優點,目前仍然是主流的密碼體制之一。最常用的對稱密碼演算法是數據加密標准(DES)演算法,但是由於DES密鑰長度較短,已經不適合當今分布式開放網路對數據加密安全性的要求。最後,一種新的基於Rijndael演算法對稱高級數據加密標准AES取代了數據加密標准DES。非對稱加密由於加/解密鑰不同(公鑰加密,私鑰解密),密鑰管理簡單,也得到廣泛應用。RSA是非對稱加密系統最著名的公鑰密碼演算法。
AES演算法
基本原理及演算法流程
美國國家標准和技術研究所(NIST)經過三輪候選演算法篩選,從眾多的分組密碼中選中Rijndael演算法作為高級加密標准(AES)。Rijndael密碼是一個迭代型分組密碼,分組長度和密碼長度都是可變的,分組長度和密碼長度可以獨立的指定為128比特,192比特或者256比特。AES的加密演算法的數據處理單位是位元組,128位的比特信息被分成16個位元組,按順序復制到一個4*4的矩陣中,稱為狀態(state),AES的所有變換都是基於狀態矩陣的變換。
用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表1所示)。在輪函數的每一輪迭代中,包括四步變換,分別是位元組代換運算(ByteSub())、行變換(ShiftRows())、列混合(MixColumns())以及輪密鑰的添加變換AddRoundKey()[3],其作用就是通過重復簡單的非線形變換、混合函數變換,將位元組代換運算產生的非線性擴散,達到充分的混合,在每輪迭代中引入不同的密鑰,從而實現加密的有效性。
表1 是三種不同類型的AES加密密鑰分組大小與相應的加密輪數的對照表。加密開始時,輸入分組的各位元組按表2 的方式裝入矩陣state中。如輸入ABCDEFGHIJKLMNOP,則輸入塊影射到如表2的狀態矩陣中。
F. 安卓http和https的區別
HTTPS()安全超文本傳輸協議它是一個安全通信通道,它基於HTTP開發,用於在客戶計算機和伺服器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的安全全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用埠443,而不是象HTTP那樣使用埠80來和TCP/IP進行通信。)SSL使用40位關鍵字作為RC4流加密演算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。HTTPS和HTTP的區別:https協議需要到ca申請證書,一般免費證書很少,需要交費。http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議http和https使用的是完全不同的連接方式用的埠也不一樣,前者是80,後者是443。http的連接很簡單,是無狀態的HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議要比http協議安全HTTPS解決的問題:1.信任主機的問題.採用https的server必須從CA申請一個用於證明伺服器用途類型的證書.改證書只有用於對應的server的時候,客戶度才信任次主機.所以目前所有的銀行系統網站,關鍵部分應用都是https的.客戶通過信任該證書,從而信任了該主機.其實這樣做效率很低,但是銀行更側重安全.這一點對我們沒有任何意義,我們的server,採用的證書不管自己issue還是從公眾的地方issue,客戶端都是自己人,所以我們也就肯定信任該server.2.通訊過程中的數據的泄密和被竄改1.一般意義上的https,就是server有一個證書.a)主要目的是保證server就是他聲稱的server.這個跟第一點一樣.b)服務端和客戶端之間的所有通訊,都是加密的.i.具體講,是客戶端產生一個對稱的密鑰,通過server的證書來交換密鑰.一般意義上的握手過程.ii.加下來所有的信息往來就都是加密的.第三方即使截獲,也沒有任何意義.因為他沒有密鑰.當然竄改也就沒有什麼意義了.2.少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書.a)這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA認證過的身份.應為個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認自己的身份.b)目前少數個人銀行的專業版是這種做法,具體證書可能是拿U盤作為一個備份的載體.HTTPS一定是繁瑣的.a)本來簡單的http協議,一個get一個response.由於https要還密鑰和確認加密演算法的需要.單握手就需要6/7個往返.i.任何應用中,過多的roundtrip肯定影響性能.b)接下來才是具體的http協議,每一次響應或者請求,都要求客戶端和服務端對會話的內容做加密/解密.i.盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL晶元.如果CPU信能比較低的話,肯定會降低性能,從而不能serve的請求.ii.加密後數據量的影響.所以,才會出現那麼多的安全認證提示
G. 安卓網路請求數據時如何保證數據的完整性和安全性使用哪種加密
通過網路傳輸數據,需要保證數據的完整性、保密性,以及能夠對數據的發送者進行身份驗證。這些都需要通過一些加密演算法實現。
對稱加密:
加密和解密使用同一個密鑰,特點:保證了數據的保密性。局限性:無法解決密鑰交換問題。常用的演算法有:DES,3DES,AES;
公鑰加密:
生成一個密鑰對(私鑰和公鑰),加密時用私鑰加密,解密時用公鑰解密,特點:解決了密鑰交換問題。局限性:對大的數據加密速度慢。
單向加密:
提取數據的特徵碼,特點:定長輸出,不可逆,可檢驗數據的完整性。局限性:無法保證數據的保密性。常用演算法:MD5、SHA1、CRC-32。
三種加密方法各有優缺點,在時實際應用中,數據從發送方到達接收方,通常是這樣應用的:
1) 首先對要發送的數據做單向加密,獲取數據的特徵碼;
2) 對特徵碼用發送方的私鑰進行加密生成S1;
3) 然後對S1和數據進行對稱加密生成S2;
4) 最後將S2和對稱加密的密碼使用接收方的公鑰進行加密。
這樣一來數據在傳輸過程中的完整性、保密性以及對發送方身份的驗證都能得到保障。
當數據到達接收方時,接收方先用自己的私鑰對接收到的數據進行解密,得到密碼和加密的數據;使用密碼對加密數據解密,得到加密的特徵碼和數據;用發送方的公鑰解密特徵碼,如果能解密,則說明該數據是由發送方所發;反之則不是,這便實現了身份驗證;最後計算數據的特徵碼和解密出來的特徵碼做對比,如果一樣,則該數據沒有被修改;反之則數據被修改過了。
H. android https和http有什麼區別
https是加密的,用雙重密鑰加密。
①首先製作一個證書,保存RSA密鑰,客戶端和服務端分別保存兩份密鑰;
②然後每次請求內容時隨機生成一個AES密鑰,客戶端請求的內容和服務端返回的內容都使用這個AES密鑰加密,保證在傳輸過程中即使被黑客抓包他也看不到原文,只能看到密文;
③AES密鑰本身(一般是6位十六進制數)被第一步的RSA密鑰加密,由於Android端和伺服器端保存了rsa的公鑰和私鑰,所以可以知道本次傳輸的AES密鑰,進而解析內容;
以上就是https加密傳輸的大致過程,而http傳輸則沒有加密過程,全部明文傳輸,一旦被抓包內容也就泄露了。
I. Android httpdns請求方法
HttpDNS是使用HTTP協議向DNS伺服器的80埠進行請求,代替傳統的DNS協議向DNS伺服器的53埠進行請求。也就是使用Http協議去進行dns解析請求,將伺服器返回的解析結果,也就是域名對應的伺服器ip獲得,直接向該ip發起對應的api服務請求,代替使用域名。那麼為什麼要使用HttpDNS呢?主要原因有三點LocalDNS劫持平均訪問延遲下降用戶連接失敗率下降LocalDNS劫持: 由於HttpDNS是通過ip直接請求http獲取伺服器A記錄地址,不存在向本地運營商詢問domain解析過程,所以從根本避免了劫持問題。 (對於http內容tcp/ip層劫持,可以使用驗證因子或者數據加密等方式來保證傳輸數據的可信度)平均訪問延遲下降: 由於是ip直接訪問省掉了一次domain解析過程,(即使系統有緩存速度也會稍快一些『毫秒級』)通過智能演算法排序後找到最快節點進行訪問。用戶連接失敗率下降: 通過演算法降低以往失敗率過高的伺服器排序,通過時間近期訪問過的數據提高伺服器排序,通過歷史訪問成功記錄提高伺服器排序。如果ip(a)訪問錯誤,在下一次返回ip(b)或者ip(c) 排序後的記錄。(LocalDNS很可能在一個ttl時間內(或多個ttl)都是返回記錄
J. android https 支持哪些標准
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議
它是一個安全通信通道,它基於HTTP開發,用於在客戶計算機和伺服器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。
它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的安全全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用埠443,而不是象HTTP那樣使用埠80來和TCP/IP進行通信。)SSL使用40 位關鍵字作為RC4流加密演算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。
HTTPS和HTTP的區別:
https協議需要到ca申請證書,一般免費證書很少,需要交費。
http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議
http和https使用的是完全不同的連接方式用的埠也不一樣,前者是80,後者是443。
http的連接很簡單,是無狀態的
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議 要比http協議安全
HTTPS解決的問題:
1
. 信任主機的問題. 採用https 的server 必須從CA 申請一個用於證明伺服器用途類型的證書. 改證書只有用於對應的server
的時候,客戶度才信任次主機. 所以目前所有的銀行系統網站,關鍵部分應用都是https 的. 客戶通過信任該證書,從而信任了該主機.
其實這樣做效率很低,但是銀行更側重安全. 這一點對我們沒有任何意義,我們的server ,採用的證書不管自己issue
還是從公眾的地方issue, 客戶端都是自己人,所以我們也就肯定信任該server.
2 . 通訊過程中的數據的泄密和被竄改
1. 一般意義上的https, 就是 server 有一個證書.
a) 主要目的是保證server 就是他聲稱的server. 這個跟第一點一樣.
b) 服務端和客戶端之間的所有通訊,都是加密的.
i. 具體講,是客戶端產生一個對稱的密鑰,通過server 的證書來交換密鑰. 一般意義上的握手過程.
ii. 加下來所有的信息往來就都是加密的. 第三方即使截獲,也沒有任何意義.因為他沒有密鑰. 當然竄改也就沒有什麼意義了.
2. 少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書.
a) 這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼, 還有一個CA 認證過的身份. 應為個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認自己的身份.
b) 目前少數個人銀行的專業版是這種做法,具體證書可能是拿U盤作為一個備份的載體.
HTTPS 一定是繁瑣的.
a) 本來簡單的http協議,一個get一個response. 由於https 要還密鑰和確認加密演算法的需要.單握手就需要6/7 個往返.
i. 任何應用中,過多的round trip 肯定影響性能.
b) 接下來才是具體的http協議,每一次響應或者請求, 都要求客戶端和服務端對會話的內容做加密/解密.
i. 盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL 晶元. 如果CPU 信能比較低的話,肯定會降低性能,從而不能serve 更多的請求.
ii. 加密後數據量的影響. 所以,才會出現那麼多的安全認證提示