MorFans Dev
折腾 - 开发 - 分享

163 key 使用指南

163 key 使用指南

网易云音乐客户端在下载歌曲时会向歌曲写入标签(元数据),其中有一长串注释,开头是 163 key(Don't modify):。显而易见,这是网易云音乐自己的识别数据,并且看起来信息量有点大。

提取 163 key

我们可以使用一些工具来读取音乐文件的标签,可以是专门的命令行工具,也可以是文件管理器或媒体播放器。值得注意的是,ffprobe 输出的 Comment 会被截断,因此可能不完整。下面以 mpg123-id3dumpVLC 媒体播放器 为例。

$ 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==

...

VLC

简单地去掉开头的 163 key(Don't modify):,就可以得到所谓的 163 keyL64FU3W4YxX3ZFTmbZ+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 则成功。

赞赏
魔帆博客,版权所有 | 如未注明,均为原创
本站均采用 BY-NC-ND 协议 (署名-非商业性使用-禁止演绎) 进行授权。
转载请注明来自本站文章:163 key 使用指南(https://www.morfans.cn/archives/2793)

chenjunyu19

文章作者

回复 repostone 取消回复

textsms
account_circle
email

  • useradam

    大佬 请问你是用了npm的那个包去进行解析的呢?

    2年前 回复
    • chenjunyu19

      @useradam:music-metadata 读取音乐文件的元数据,用 node 自带的 Crypto 模块进行 AES 解密。

      2年前 回复
      • useradam

        @chenjunyu19: 大佬 我也是拿了元数据用crypto模块解密了 但是不知道为什么base64编码之后出来是乱码 我试着先aes解密在base64解码和base64解码再aes解密 base64编码之后的数据是乱码的 请问大佬正常的步骤是什么呢?

        2年前 回复
        • chenjunyu19

          @useradam: 这是我从我以前的代码里找到的片段,你参考一下吧。

          const key = comment.substring(22); // 移除 163 key(Don't modify):
          const aes128ecbDecipher = crypto.createDecipheriv('aes-128-ecb', '#14ljk_!\\]&0U<\'(', '');
          const aesd = aes128ecbDecipher.update(key, 'base64') + aes128ecbDecipher.final(); // Base64 解码,AES 解密
          const json = JSON.parse(aesd.substring(6)); // 移除 music: 并解析 JSON

          2年前 回复
  • 给你增加点评论吧。

    5年前 回复

163 key 使用指南
网易云音乐客户端在下载歌曲时会向歌曲写入标签(元数据),其中有一长串注释,开头是 163 key(Don't modify):。显而易见,这是网易云音乐自己的识别数据,并且看起来信息量有点大。 …
扫描二维码继续阅读
2019-05-03