网易云音乐客户端在下载歌曲时会向歌曲写入标签(元数据),其中有一长串注释,开头是 163 key(Don't modify):
。显而易见,这是网易云音乐自己的识别数据,并且看起来信息量有点大。
提取 163 key
我们可以使用一些工具来读取音乐文件的标签,可以是专门的命令行工具,也可以是文件管理器或媒体播放器。值得注意的是,ffprobe
输出的 Comment
会被截断,因此可能不完整。下面以 mpg123-id3dump
和 VLC 媒体播放器
为例。
$ mpg123-id3dump 世末歌者.mp3 FILE: 世末歌者.mp3 ==== ID3v1 ==== ==== ID3v2 ==== Title: 世末歌者 Artist: COP/乐正绫 Album: 世末歌者-COSMOSⅡ Comment: 163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/Sm+VDuKL1N9WbXrMSwj2roX3nFerjLZ29+ygThEbpG/oFLahRh55XqJqIJQ4AiBlcSOODs9zpp5vYAcrAFFAxq7wIzRvxO7ncsfPktQ9yWWsYtsZ8gOa2nKCFyM/gjKsqW30C5x1NFWCsDeB+ZoO80RpZqApI71m+FWWd3M4zVap69KHy55z7xs1Q7JiiRT9UyMc1qJRGh0IVz74bf8h7vnItDqauc+yU0y2rro1uJ+PiCImrO0xS74kcZY9UQ4Ifu9RK3E+q0xbYQZo4MLizOneYoNGgbTiQNqayVsd7QypgdXAOYevvcInaeRxqPRJcbpzJ5P9ZVOc1+wkW0MHq/OX01ZrNxvLChL47JZ2Mb0qiOMB0K5acx2UpLsjmjmsNYIRlIzhy7JT0kEhl2tUsvLHrixsvhna932G0NtklXAhOoKa5ks4fn+RkPhWqyDmpzrE8YKAtoW2qiCEt3u64A8BVjBz6SyGUK7FenH+ssnfjz0F3fD9O03Ta1bGb2qpw== ...
简单地去掉开头的 163 key(Don't modify):
,就可以得到所谓的 163 key
:L64FU3W4YxX3ZFTmbZ+8/Sm+VDuKL1N9WbXrMSwj2roX3nFerjLZ29+ygThEbpG/oFLahRh55XqJqIJQ4AiBlcSOODs9zpp5vYAcrAFFAxq7wIzRvxO7ncsfPktQ9yWWsYtsZ8gOa2nKCFyM/gjKsqW30C5x1NFWCsDeB+ZoO80RpZqApI71m+FWWd3M4zVap69KHy55z7xs1Q7JiiRT9UyMc1qJRGh0IVz74bf8h7vnItDqauc+yU0y2rro1uJ+PiCImrO0xS74kcZY9UQ4Ifu9RK3E+q0xbYQZo4MLizOneYoNGgbTiQNqayVsd7QypgdXAOYevvcInaeRxqPRJcbpzJ5P9ZVOc1+wkW0MHq/OX01ZrNxvLChL47JZ2Mb0qiOMB0K5acx2UpLsjmjmsNYIRlIzhy7JT0kEhl2tUsvLHrixsvhna932G0NtklXAhOoKa5ks4fn+RkPhWqyDmpzrE8YKAtoW2qiCEt3u64A8BVjBz6SyGUK7FenH+ssnfjz0F3fD9O03Ta1bGb2qpw==
。
Base64 解码
接着再对其进行 Base64 解码,可以得到一串密文。
AES 解密
经过网上一番搜寻,得知这串密文是用 aes-128-ecb
算法加密的,密码是 #14ljk_!\]&0U<'(
。
解密后,可以得到最后我们要的明文 JSON 数据:music:{"musicId":429460239,"musicName":"世末歌者","artist":[["COP",12002071],["乐正绫",1102240]],"albumId":34871118,"album":"世末歌者-COSMOSⅡ","albumPicDocId":"17790098137764958","albumPic":"http://p4.music.126.net/sZGaAxUHHhuhQ1Zxa2jw4g==/17790098137764958.jpg","bitrate":320000,"mp3DocId":"d82119ba7e3519b1f5e618ae2d289f4c","duration":321802,"mvId":5361399,"alias":[],"transNames":[]}
。去掉开头的 music:
并格式化一下,便于查看。
{ "musicId": 429460239, "musicName": "世末歌者", "artist": [ [ "COP", 12002071 ], [ "乐正绫", 1102240 ] ], "albumId": 34871118, "album": "世末歌者-COSMOSⅡ", "albumPicDocId": "17790098137764958", "albumPic": "http://p4.music.126.net/sZGaAxUHHhuhQ1Zxa2jw4g==/17790098137764958.jpg", "bitrate": 320000, "mp3DocId": "d82119ba7e3519b1f5e618ae2d289f4c", "duration": 321802, "mvId": 5361399, "alias": [], "transNames": [] }
后记
最后,你就可以拿这些数据去干活了。具体能干嘛,不妨看看 Binaryify/NeteaseCloudMusicApi。另外值得一提的是,我使用命令行工具进行 AES 解密会失败,原因未知,用 Node.js
则成功。
发表回复