小紅書API簽名算法分析

小紅書APP API接口使用url中的sign參數和header中shield參數來校驗請求的有效性,咱們隨便看一個API請求:android

GET https://www.xiaohongshu.com/api/sns/v1/system_service/config?launchtimes=1&platform=android&deviceId=e0805561-6579-3ec6-b717-d64adf33c3ef&device_fingerprint=20190519202808a5dac07354d5e3b71a01abb98b0d6dc6016852749a37a304&device_fingerprint1=20190519202808a5dac07354d5e3b71a01abb98b0d6dc6016852749a37a304&versionName=5.45.0&channel=xiaohongshu&sid=session.1558744693398053223445&lang=zh-Hans&t=1558749910&sign=c4513e220ab27a8561191440d912f457 HTTP/1.1
device_id: e0805561-6579-3ec6-b717-d64adf33c3ef
Authorization: session.1558744693398053223445
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; 2014813 MIUI/7.11.16) Resolution/720*1280 Version/5.45.0 Build/5450095 Device/(Xiaomi;2014813) NetType/WiFi
shield: aa1fb61921361897c61894b5444a2d0715c75caa473dd8991187f78a22cdcfa0
Host: www.xiaohongshu.com
Connection: Keep-Alive
Accept-Encoding: gzip
複製代碼

sign參數是用url中的參數計算出來的,大概流程以下:api

  1. 把url中的參數按key=value的形式按字母順序拼接到一塊兒
  2. 對1的結果進行url encode
  3. 把2的結果轉成byte array
  4. 從url中獲取deviceId,並轉成byte array
  5. 對3和4的結果每一個字節進行相關的異或運算
    在這裏插入圖片描述
  6. 把5的結果的md5和deviceId拼接到一塊兒
  7. 計算6的結果的md5

shield參數是由帶上sign參數的url計算出來的,是經過攔截請求,在header中插入shield字段,這部分是在process方法中實現,process是一個native方法,在libshield.so中定義bash

在這裏插入圖片描述
小紅書API的簽名參數計算流程就這樣,對細節感興趣的朋友能夠 聯繫我
相關文章
相關標籤/搜索