本文旨在分析網(wǎng)易云音樂試聽歌曲地址的API丹莲,參考文章網(wǎng)易云音樂登錄API(2016.04) Python3版以及如何爬網(wǎng)易云音樂的評論數(shù)?献宫。雖然這兩篇分別是登錄篇和評論篇堡僻,但大同小異糠惫,區(qū)別在于bl參數(shù)不同
- 首先分析請求,可以看到關(guān)鍵點在于params和encSecKey這兩個參數(shù)的獲取
- 將initiator的JS文件復(fù)制到WebStorm中钉疫,格式化硼讽,查找params和encSecKey,如下:
var bua = window.asrsea(JSON.stringify(bl), bbZ(["流淚", "強"]), bbZ(cnb.md), bbZ(["愛心", "女孩", "驚恐", "大笑"]));
bf.data = bm.eX({params: bua.encText, encSecKey: bua.encSecKey})
3.利用知乎參考回答中的方法,可以在控制臺輸出中看到:
bbZ(["流淚", "強"]) = 010001
bbZ(cnb.md) = 00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7
bbZ(["愛心", "女孩", "驚恐", "大笑"]) = 0CoJUm6Qyw8W8jud
bl =
br = 128000(碼率)
csrf_token = "18d55720a342bf3eae987e7ca40a5ed4"
ids = "[421423806]"(歌曲ID)
- 那么參數(shù)問題都搞定了牲阁,開始搞window.asrsea固阁,可以發(fā)現(xiàn)如下代碼:
window.asrsea = d
function d(d, e, f, g) {
var h = {}, i = a(16);
return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h
}
然后再去追查函數(shù)a,b,c的定義,如下:
function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)e = Math.random() * b.length, e = Math.floor(e), c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b), d = CryptoJS.enc.Utf8.parse("0102030405060708"), e = CryptoJS.enc.Utf8.parse(a), f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131), d = new RSAKeyPair(b, "", c), e = encryptedString(d, a)
}
函數(shù)a的作用是生成長度為16的隨機字符串
函數(shù)b的作用是AES加密(CBC城菊,padding = pkcs7)
函數(shù)c的作用是RSA加密(暫且沒弄懂)
- 根據(jù)以上理出來的思路您炉,寫出加密代碼得到兩個加密數(shù)據(jù)即可。