移動端請求URL的加密/解密
移動端請求URL的加密/解密
移動端請求URL的加密方式
最近一直在研究如何爬取手機客戶端請求的資料資訊,發現很多手機客戶端在請求服務端資料的時候,對請求的URL都做了一些加密處理,所以自己就私下裡研究了一下URL的一些加密演算法
下面是一個比較基本的URL加密處理方式:
- 1.服務端和客戶端約定好一個公約KEY
- 2.選擇一種加密方式MD5,SHA等等(這裡重點介紹Mac演算法)
- 3.選擇要做加密處理的引數(一般是靜態引數 + 動態引數的方式,比如:loginToken登入祕鑰 + timestamp時間戳)
- 4.客戶端根據公約KEY使用Mac演算法,對指定的引數(loginToken + timestamp)進行加密處理生成祕鑰secret,把secret當做引數傳遞給服務端
- 5.服務端會也會根據公約KEY使用Mac演算法,對指定的引數做同樣的加密處理,並且把結果和secret引數進行比較,來判斷這個請求是否是正確的
引數:
loginToken : 8d940b09872346a****0f9844c70d51
timestamp : 1447327804725
客戶端加密處理的祕鑰:
secret : 8d940b098773464796b****844c70d516447327804725
MAC演算法(這裡的MAC可不是蘋果筆記本。。)
MAC演算法結合了MD5和SHA演算法的優勢,並加入金鑰的支援,是一種更為安全的訊息摘要演算法。
MAC(Message Authentication Code,訊息認證碼演算法)是含有金鑰的雜湊函式演算法,相容了MD和SHA演算法的特性,並在此基礎上加入了金鑰。
MAC演算法主要集合了MD和SHA兩大系列訊息摘要演算法。MD系列的演算法有HmacMD2、HmacMD4、HmacMD5三種演算法;SHA系列的演算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384.HmacSHA512五種演算法。
經過MAC演算法得到的摘要值也可以使用十六進位制編碼表示,其摘要值長度與參與實現的摘要值長度相同。例如,HmacSHA1演算法得到的摘要長度就是SHA1演算法得到的摘要長度,都是160位二進位制,換算成十六進位制編碼為40位。
模型分析
甲乙雙方進行資料交換可以採取如下流程完成
-
- 甲方向乙方公佈摘要演算法(就是指定要使用的摘要演算法名)
-
- 甲乙雙方按照約定構造金鑰,雙方擁有相同的金鑰(一般是一方構造金鑰後通知另外一方,此過程不需要通過程式實現,就是雙方約定個字串,但是這個字串可不是隨便設定的,也是通過相關演算法獲取的)
-
- 甲方使用金鑰對訊息做摘要處理,然後將訊息和生成的摘要訊息一同傳送給乙方
-
- 乙方收到訊息後,使用甲方已經公佈的摘要演算法+約定好的金鑰 對收到的訊息進行摘要處理。然後比對自己的摘要訊息和甲方發過來的摘要訊息。甄別訊息是否是甲方傳送過來的
MAC用於訊息認證
訊息認證碼
密碼學中,通訊實體雙方使用的一種驗證機制,保證訊息資料完整性的一種工具。
安全性依賴於Hash函式,故也稱帶金鑰的Hash函式。
訊息認證碼是基於金鑰和訊息摘要【hash】所獲得的一個值,目的是用於驗證訊息的完整性,確認資料在傳送和儲存過程中未受到主動攻擊
下面是使用HmacSHA1進行加密的具體程式碼
/**
* 初始化HmacSHA1金鑰
*
* @return byte[] 金鑰
* @throws Exception
*/
public static byte[] initHmacSHAKey() throws Exception {
// 初始化KeyGenerator
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacSHA1");
// 產生金鑰
SecretKey secretKey = keyGenerator.generateKey();
// 獲得金鑰
return secretKey.getEncoded();
}
/**
- HmacSHA1訊息摘要
* @param data 待做摘要處理的資料
* @param key 金鑰
* @return byte[] 訊息摘要
* @throws Exception
*/
public static byte[] encodeHmacSHA(byte[] data, byte[] key)
throws Exception {
// 還原金鑰
SecretKey secretKey = new SecretKeySpec(key, “HmacSHA1”);
// 例項化Mac
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
// 初始化Mac
mac.init(secretKey);
// 執行訊息摘要
return mac.doFinal(data);
}
參考文章:
移動端請求URL的加密/解密
移動端請求URL的加密方式
最近一直在研究如何爬取手機客戶端請求的資料資訊,發現很多手機客戶端在請求服務端資料的時候,對請求的URL都做了一些加密處理,所以自己就私下裡研究了一下URL的一些加密演算法
下面是一個比較基本的URL加密處理方式:
- 1.服務端和客戶端約定好一個公約KEY
- 2.選擇一種加密方式MD5,SHA等等(這裡重點介紹Mac演算法)
- 3.選擇要做加密處理的引數(一般是靜態引數 + 動態引數的方式,比如:loginToken登入祕鑰 + timestamp時間戳)
- 4.客戶端根據公約KEY使用Mac演算法,對指定的引數(loginToken + timestamp)進行加密處理生成祕鑰secret,把secret當做引數傳遞給服務端
- 5.服務端會也會根據公約KEY使用Mac演算法,對指定的引數做同樣的加密處理,並且把結果和secret引數進行比較,來判斷這個請求是否是正確的
引數:
loginToken : 8d940b09872346a****0f9844c70d51
timestamp : 1447327804725