网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取
[PHP]網易云音樂params計算及直鏈提取
在這種之前 寫過一個音樂助手 集齊了主流音樂網站的web解析接口 但是這些接口提供的音樂的質量都不高 只有個別網站能夠提供較高音質的音樂。在開發過程中想到了 網易云音樂 但是通過實際抓包操作發現網易云音樂對參數實行了AES和RSA加密 從而無法得到真實的數據。后來通過參考網上的文檔以及各路大神的分析 大多都提供的python的實例PHP的卻很少。
通過參考 知乎用戶 @平胸小仙女 在【如何爬網易云音樂的評論數?】的回答得到了一些重要信息。
通過上面的大神的完整分析 知道了其參數params和encSecKey是存在必要聯系 一個是使用AES加密(需要填充)另一個則采用了RSA對參數進行了混淆加密。然而通過開發者的調試找到相關函數 function d(d, e, f, g) 和分析后明白了這個加密 params 先使用key加密后再使用一個隨機數 i 進行加密,然而參數encSecKey則是相對于隨機數i進行生成的 也就是說 i不變的話 encSecKey也就不會發生變化。
在此之后 參考了 Github 用戶 @darknessomi 的項目 MusicBOX 的雖然這個項目是Python寫的 但是也不太影響 經過對代碼的閱讀后。上手開始使用PHP對算法進行仿寫并使用chrome斷點實時調試。
一次加密:關于params參數的AES用到的填充。因為個人對加密解密這塊沒什么研究所以只能根據現有的Python代碼揣測。16-len(text)%16解釋為 使用16減去params原文余16。根據PHP寫出對應的代碼。算出來后再通過chr()`傳入結果取出ASCII的對應字符,并使用函數進行重復 ,重復次數為上面的結果。 之后再使用key對其進行第一次加密。
二次加密:對上面加密后的結果進行加密,key是一個隨機數但是這個隨機數只要一固定下來 encSecKey 也就不用去算了 所以直接固定掉這個隨機數 不必再做 encSecKey 的計算。
對params計算完成后通過測試和chrome斷點計算的一模一樣 至此就算完成了。
其實在這之前有嘗試過兩次直接分析js但是由于一些因素都放棄了 。沒想到這次帶來了意外的成功 非常感謝 知乎的 @平胸小仙女 、以及 Github的@darknessomi。
Notes: 這些代碼可能不能在PHP 5.4.0以下的版本中工作。
/**
*?@name?網易云音樂?ID解析直鏈
*?@author?唯一丶?
*?@version?1.0
*?@date?2107-11-13
*?@Documented?根據注釋修改云音樂id即可。參考實例:?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的值為網易云音樂中音樂的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));
總結
以上是生活随笔為你收集整理的网易云音乐encseckey算法php,[PHP]网易云音乐params计算及直链提取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ppt设置外观样式_ppt设置主题样式的
- 下一篇: html怎么让五张照片并排显示,最考验右