网易云音乐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计算及直链提取相关推荐
- 让你上瘾的网易云音乐推荐算法,用Word2vec就可以实现
上个周被网易云音乐的听歌报告刷屏,文摘菌这才发现,朋友圈不乏年度听歌成千上万的音乐重度患者.这群人可能中的不是音乐的毒,而是这套个性化音乐推荐算法真的太懂你. 这也又引起了一波对推荐算法的讨论.本文作 ...
- 网易云 6 亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验. 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落 ...
- 网易云音乐的算法有什么特点_当算法设计音乐厅时会发生什么?
网易云音乐的算法有什么特点 Here are three links worth your time: 这是三个值得您花费时间的链接: What happens when algorithms des ...
- 网易云音乐 推荐算法
本篇文章我们从网易云音乐的推荐功能出发,结合我的实习工作,聊一聊互联网的常用推荐策略. 首先来回顾一下云音乐的推荐功能. 网易云音乐推荐 音乐推荐是创始人丁磊先生愿景最直接的体现,也是网易云音乐的主推 ...
- 网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验. 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落 ...
- 网易云api如何调用_分析网易云音乐API的经历
在做qq机器人的时候想加入点歌功能,虽然自带一个点歌插件,但是只能分享QQ音乐,所以我想着自己写一个网易云音乐的. 首先打开网易云音乐的搜索界面,F12打开开发者工具并切换到Network. 随便搜索 ...
- 习惯了收听虾米酷狗网易云音乐的你,好歹知道一下音乐推荐到底是咋回事吧
翻译 | reason_ W编辑 | suiling 营长按: 不好意思,被标题党了吧 其实,我们全篇讲的是坐音乐推荐的始祖Spotify的音乐推荐系统. 搞懂了这货的算法,还有啥是你不知道的. 不说 ...
- python爬音乐-用python爬取网易云音乐歌曲的歌词
今天我来分享一下如何用python爬取网易云音乐歌曲的歌词,网易云音乐的歌词的爬取思路同前面介绍过的爬取网易云音乐的歌曲评论的爬取思路一致.由于两者的加密思路都是一致的,因此我们只需分析出被加密了的参 ...
- 网易云音乐android api_网易云音乐怎么发布个人Mlog?网易云音乐发布个人Mlog的教程介绍...
现在很多人都喜欢发Mlog,网易云音乐中也可以发布mlog啦,下面小编就为大家带来网易云音乐发布个人Mlog的具体操作方法,想知道的话就来看看吧. 网易云音乐怎么发布个人Mlog?网易云音乐发布个人M ...
- 如何将已下载音乐导入到iPhone的网易云音乐中
背景 有些音乐是网易云音乐上没有的,即便是花钱也无法得到的,这样一来,如果对于一个只使用单一软件播放音乐的人来说,很坑,怎么办呢? 对策 既然这样,找找别的方法,其实iTunes本身应该是一个很好用的 ...
最新文章
- Android的数据存储方式
- Android训练课程(Android Training) - 高效的显示图片
- python load_Python实例:numpy.load()的使用
- 用计算机改手机电量,手机电池使用时间增加
- 【Qt】2D绘图之绘制文字
- Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
- mysql填写账户远程_如何开启MySQL的远程帐号
- 在C++中调用DLL中的函数(2)
- 学习python课程_想学习Python吗? 这是我们的免费4小时互动课程
- Bash(Shell)基础知识
- centos7 安装pip
- Java 内部类、局部内部类、静态内部类使用
- Laravel 安装mysql、表增加模拟数据、生成控制器
- 5折购票ing!与字节、阿里、腾讯、百度等大厂技术大佬线下面基!
- Permute 3.6.4 小巧便捷的多媒体文件格式转换器
- 所有B2B从业者都会遇到的9个问题(詹仕波)
- 微信管理软件哪个比较不错
- select标签 selected 选中状态动态查询
- react-router v6替换history.goBack()和goForward()
- YARN队列优先级分配策略