1. 程式人生 > >移動端請求URL的加密/解密

移動端請求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位。

模型分析

甲乙雙方進行資料交換可以採取如下流程完成

    1. 甲方向乙方公佈摘要演算法(就是指定要使用的摘要演算法名)
    1. 甲乙雙方按照約定構造金鑰,雙方擁有相同的金鑰(一般是一方構造金鑰後通知另外一方,此過程不需要通過程式實現,就是雙方約定個字串,但是這個字串可不是隨便設定的,也是通過相關演算法獲取的)
    1. 甲方使用金鑰對訊息做摘要處理,然後將訊息和生成的摘要訊息一同傳送給乙方
    1. 乙方收到訊息後,使用甲方已經公佈的摘要演算法+約定好的金鑰 對收到的訊息進行摘要處理。然後比對自己的摘要訊息和甲方發過來的摘要訊息。甄別訊息是否是甲方傳送過來的

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