技术教程acfan的视频详情接口请求及解密算法
几年没登录
该资源由乐我知免费分享!
,粗略看了一下又冷清不少。另外,本帖所针对的不是Acfun,而是更为人知的Acfan(就是你懂的那个[勉强])
——————————
接口路径:/api/video/getVideoById
请求方法:GET
响应格式:JSON(加密)
GET参数:
videoId | acfan的视频id | 整数型
_t | 当前毫秒级时间戳 | 整数型
请求头:
User-Agent | 用户代理 | 随便找一个就行
aut | 用户token | 抓包获取
deviceid | 加密设备id | 抓包获取
device | 设备类型 | Android
appversion | 应用版本 | 1.9.6
user-mark | 用户标记 | xhp
t | 毫秒时间戳 | 同_t
s | sign,用于验证请求是否合法 | 下面教程给算法
sid | 会话id | 抓包获取,作用未知
referer | 来源页 | 填视频页地址就行
————————————————
请求头部分:
s参数生成:
取当前毫秒时间戳的第4到8位(共5位数字),对这5位数字用MD5加密,结果即为s的值
例:时间戳1741881600000,取18816,md5后得到5d41402abc4b2a76b9719d911017c592
——————————————
响应体部分:
结构:{"code":200,"msg":"success","encData":"base64加密数据"}
注意如果code是301则意味着token过期
解密:
算法AES-128-CBC,密钥是token[2:18](aut参数的第3到18位),IV和密钥一样,填充PKCS7,数据先base64解码再解密
python代码:
key = token[2:18].encode()
encdata = base64.b64decode(encdata_b64)
cipher = AES.new(key, AES.MODE_CBC, key)
plaintext = unpad(cipher.decrypt(encdata), AES.block_size)
data = json.loads(plaintext.decode())