网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取
[PHP]網(wǎng)易云音樂(lè)params計(jì)算及直鏈提取
在這種之前 寫過(guò)一個(gè)音樂(lè)助手 集齊了主流音樂(lè)網(wǎng)站的web解析接口 但是這些接口提供的音樂(lè)的質(zhì)量都不高 只有個(gè)別網(wǎng)站能夠提供較高音質(zhì)的音樂(lè)。在開發(fā)過(guò)程中想到了 網(wǎng)易云音樂(lè) 但是通過(guò)實(shí)際抓包操作發(fā)現(xiàn)網(wǎng)易云音樂(lè)對(duì)參數(shù)實(shí)行了AES和RSA加密 從而無(wú)法得到真實(shí)的數(shù)據(jù)。后來(lái)通過(guò)參考網(wǎng)上的文檔以及各路大神的分析 大多都提供的python的實(shí)例PHP的卻很少。
通過(guò)參考 知乎用戶 @平胸小仙女 在【如何爬網(wǎng)易云音樂(lè)的評(píng)論數(shù)?】的回答得到了一些重要信息。
通過(guò)上面的大神的完整分析 知道了其參數(shù)params和encSecKey是存在必要聯(lián)系 一個(gè)是使用AES加密(需要填充)另一個(gè)則采用了RSA對(duì)參數(shù)進(jìn)行了混淆加密。然而通過(guò)開發(fā)者的調(diào)試找到相關(guān)函數(shù) function d(d, e, f, g) 和分析后明白了這個(gè)加密 params 先使用key加密后再使用一個(gè)隨機(jī)數(shù) i 進(jìn)行加密,然而參數(shù)encSecKey則是相對(duì)于隨機(jī)數(shù)i進(jìn)行生成的 也就是說(shuō) i不變的話 encSecKey也就不會(huì)發(fā)生變化。
在此之后 參考了 Github 用戶 @darknessomi 的項(xiàng)目 MusicBOX 的雖然這個(gè)項(xiàng)目是Python寫的 但是也不太影響 經(jīng)過(guò)對(duì)代碼的閱讀后。上手開始使用PHP對(duì)算法進(jìn)行仿寫并使用chrome斷點(diǎn)實(shí)時(shí)調(diào)試。
一次加密:關(guān)于params參數(shù)的AES用到的填充。因?yàn)閭€(gè)人對(duì)加密解密這塊沒(méi)什么研究所以只能根據(jù)現(xiàn)有的Python代碼揣測(cè)。16-len(text)%16解釋為 使用16減去params原文余16。根據(jù)PHP寫出對(duì)應(yīng)的代碼。算出來(lái)后再通過(guò)chr()`傳入結(jié)果取出ASCII的對(duì)應(yīng)字符,并使用函數(shù)進(jìn)行重復(fù) ,重復(fù)次數(shù)為上面的結(jié)果。 之后再使用key對(duì)其進(jìn)行第一次加密。
二次加密:對(duì)上面加密后的結(jié)果進(jìn)行加密,key是一個(gè)隨機(jī)數(shù)但是這個(gè)隨機(jī)數(shù)只要一固定下來(lái) encSecKey 也就不用去算了 所以直接固定掉這個(gè)隨機(jī)數(shù) 不必再做 encSecKey 的計(jì)算。
對(duì)params計(jì)算完成后通過(guò)測(cè)試和chrome斷點(diǎn)計(jì)算的一模一樣 至此就算完成了。
其實(shí)在這之前有嘗試過(guò)兩次直接分析js但是由于一些因素都放棄了 。沒(méi)想到這次帶來(lái)了意外的成功 非常感謝 知乎的 @平胸小仙女 、以及 Github的@darknessomi。
Notes: 這些代碼可能不能在PHP 5.4.0以下的版本中工作。
/**
*?@name?網(wǎng)易云音樂(lè)?ID解析直鏈
*?@author?唯一丶?
*?@version?1.0
*?@date?2107-11-13
*?@Documented?根據(jù)注釋修改云音樂(lè)id即可。參考實(shí)例:?https://github.com/darknessomi/musicbox/?非常感謝。
*/
(PHP_VERSION?
function?NetEaseMusicAES($text,$key){
$iv?=?'0102030405060708';
$text?=?trim($text);
$pad?=?16-strlen($text)%16;
$chr?=?chr($pad);
$text?=?$text.str_repeat($chr,$pad);
$enStr?=?mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$text,MCRYPT_MODE_CBC,$iv);
$enStr?=?base64_encode($enStr);
return?$enStr;
}
$key?=?'0CoJUm6Qyw8W8jud';
$text?=?'{"ids":"[5280317]","br":128000,"csrf_token":""}';//ids的值為網(wǎng)易云音樂(lè)中音樂(lè)的id?其他不變
$module?=?'dcf734dbca8108164eb3b237f79b1945fbd63232c3d6b84aeef5c15ab5dad28fbc30bb3aa1ef9484b7a0ec69dcc85d4c77bda1f9d788713d730f6cee31b9d8a8302791b95822a60d51681cd9fd74043aa0d50a57707190db6ff59658034066286754a1bb0c2a3253c3fcf2dab7b4be9d33f62507c1ad3dd78561c75a69b5191f';
$enStr?=?NetEaseMusicAES($text,$key);
$key2?=?'wbPl0UucSzEeGlKO';
$params?=?NetEaseMusicAES($enStr,$key2);
$url?=?'http://music.163.com/weapi/song/enhance/player/url?csrf_token=';
$data['params']?=?$params;
$data['encSecKey']?=?$module;
$data?=?http_build_query($data);
function?_Curl($url,$post_data){
$ch?=?curl_init();
curl_setopt($ch,?CURLOPT_URL,?$url);
curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?1);
curl_setopt($ch,?CURLOPT_POST,?1);
curl_setopt($ch,?CURLOPT_POSTFIELDS,?$post_data);
$result?=?curl_exec($ch);
curl_close($ch);
return?$result;
}
var_dump(_Curl($url,$data));
總結(jié)
以上是生活随笔為你收集整理的网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ppt设置外观样式_ppt设置主题样式的
- 下一篇: hessianphp java_hess