网易云音乐新API简述

Web
  1. 1. Url
  2. 2. 加密算法
    1. 2.1. 一些细节

新API采用了略微修改过的AES和RSA加密,主要用在登陆接口上,对新API进行简单的分析。

Url

估计会抓包的人都知道,Url中的api便成了weapi。比如手机登录:
原来是:http://music.163.com/api/login/cellphone/
现在是:http://music.163.com/weapi/login/cellphone/

加密算法

核心过程如下:

1
2
3
4
5
6
7
aesRsaEncrypt = function (text, pubKey, modulus, nonce) {
const secKey = createSecretKey(16); // 随机生成16位加密密钥
return {
params: aesEncrypt(aesEncrypt(text, nonce), secKey),
encSecKey: rsaEncrypt(secKey, pubKey, modulus)
}
}

1
2
3
4
5
6
{
Text : "JSON.stringify({phone:xxx,password:"md5 hashed Data",rememberLogin:"true"})" //需要加密的post body
pubKey : "010001"
nonce : "0CoJUm6Qyw8W8jud"
modulus : "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
}

一些细节

  1. AES加密的具体算法为:AES-128-CBC,输出格式为base64。
  2. AES加密时需要指定iv:0102030405060708
  3. RSA加密输出为Hex格式,公钥是{N:modulus,e:pubKey}
  4. 我的Javascript实现:Crypto
  5. RSA算法的JS实现方法参考:http://www.cnblogs.com/kxdhm/archive/2012/02/02/2336103.html