网易云音乐新API简述
新API采用了略微修改过的AES和RSA加密,主要用在登陆接口上,对新API进行简单的分析。
Url
估计会抓包的人都知道,Url中的api便成了weapi。比如手机登录: 原来是:http://music.163.com/api/login/cellphone/ 现在是:http://music.163.com/weapi/login/cellphone/
加密算法
核心过程如下:
aesRsaEncrypt = function (text, pubKey, modulus, nonce) {
const secKey = createSecretKey(16); // 随机生成16位加密密钥
return {
params: aesEncrypt(aesEncrypt(text, nonce), secKey),
encSecKey: rsaEncrypt(secKey, pubKey, modulus)
}
}
{
Text : "JSON.stringify({phone:xxx,password:"md5 hashed Data",rememberLogin:"true"})" //需要加密的post body
pubKey : "010001"
nonce : "0CoJUm6Qyw8W8jud"
modulus : "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
}
一些细节
- AES加密的具体算法为:AES-128-CBC,输出格式为base64。
- AES加密时需要指定iv:
0102030405060708
- RSA加密输出为Hex格式,公钥是
{N:modulus,e:pubKey}
- 我的Javascript实现:Crypto
- RSA算法的JS实现方法参考:http://www.cnblogs.com/kxdhm/archive/2012/02/02/2336103.html