网易云音乐params和encSecKey生成原理

本文详细解析了网易云音乐API中params和encSecKey的加密流程,包括两次AES加密和RSA加密。通过固定第二次AES加密的密钥,简化了爬虫流程,使encSecKey保持不变。并提供了生成params和encSecKey的Java代码示例,以及音乐搜索和获取音乐文件接口的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先来个整体的解析

  • params:经过两次AES加密后的数据(128位,CBC,pkcs5padding)

第一加密:要加密的是真正要发送的明文数据(数据的具体格式,下面会讲),密钥固定为0CoJUm6Qyw8W8jud,iv为固定为0102030405060708

第二加密:先把第一次加密结果转base64格式后,再进行加密。密钥是在前端随机生成的(长度为16个字节),iv为也是固定为0102030405060708

  • encSecKey:经过RSA加密后的数据(1024位,ECB,nopadding)

上面提到的第二次AES加密的密钥是在前端随机生成的,服务器想要解密数据,必须知道这个密钥,但服务器是怎么知道这个随机密钥的呢?
这时encSecKey就派上用场了。用RSA加密AES密钥后,再发给服务器。没错,encSecKey就是RSA加密后的AES密钥

注意,在加密前,需要对明文反转处理,例如:如果加密的明文是aaaabbbbccccdddd,那你要把它转成ddddccccbbbbaaaa后再进行RSA加密

用到了RSA加密,那这个RSA的公钥是多少?很幸运,这个公钥是固定的。modulus和publicExponent如下(都是十进制):

modulus=157794750267131502212476817800345498121872783333389747424011531025366277535262539913701806290766479189477533597854989606803194253978660329941980786072432806427833685472618792592200595694346872951301770580765135349259590167490536138082469680638514416594216629258349130257685001248172188325316586707301643237607
publicExponent=65537



2.简化爬虫

上面提到过,params的第二次AES加密的密钥是在前端随机生成的,假如进行干预,让每次生成的密钥都一样,这样的话encSecKey每次也就一样了。

为了方便爬虫,让每次encSecKey都固定,我就让第二次AES加密密钥每次都是aaaabbbbccccdddd
然后进行按上面提到的规则进行RSA加密,生成encSecKey代码如下

import javax.crypto.Cipher;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPublicKeySpec;


public class Test {
   


    public static void main(String[] args) throws Exception{
   
        String modulus ="15779475026713150221247681780034549812187278333338974742401153102536627753526253991370180629076647918947753359785498960680319425397866032994198078607243280642783368547261879259220059
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值