利用爬虫js逆向破解网易云制作播放器
目标网易云音乐
详情见B站教程https://www.bilibili.com/video/BV18V4y1T79F?p=14
还有这两篇https://blog.csdn.net/zly717216/article/details/113522474
https://blog.csdn.net/qq_36779888/article/details/90738012
抓包
喜爱页
https://music.163.com/weapi/v6/playlist/detail?csrf_token=880738687515b74fb700788c52270b8b
搜索页
https://music.163.com/#/search/m/?id=7053185814&s=陈奕迅&type=1
歌曲页
https://music.163.com/#/song?id=65800
辅助代码,下载喜爱歌曲到一个列表里面
copyimport execjs
import requests
headers = {
'referer': 'https://music.163.com/',
'cookie':'_ga=GA1.1.18448714.1632904553; _ntes_nuid=9c0d0f8e61f12c731b6fb04a2d2e279b; _ga_C6TGHFPQ1H=GS1.1.1632904553.1.0.1632904615.0; NMTID=00Ozo1wJ1fXcNyV6kiHvvcOtt5D20kAAAF8ZQy0RA; WNMCID=wsqenr.1633782907500.01.0; WEVNSM=1.0.0; WM_TID=dI1C5xAE2t1AURUEBUI78DgnQaSfP1on; usertrack=ezq0J2LYu3quZhxDA9yVAg==; ntes_kaola_ad=1; _ntes_nnid=9c0d0f8e61f12c731b6fb04a2d2e279b,1664203664905; __snaker__id=FcswSyk2djPmoVxA; YD00000558929251%3AWM_TID=S6hdsgMkCj1BRAQUQELVSiqMIXGKybbE; _9755xjdesxxd_=32; hb_MA-93D5-9AD06EA4329A_source=www.baidu.com; __root_domain_v=.163.com; _qddaz=QD.351866958934376; WM_NI=0muVkpfNdOBVCkJVaAa%2FRcJak77OdnGHxOZhxcKgWNuswIp1NId%2BMR28EuoKp4V4WTfqCac3%2BW61WiioRfKkvvm5HMsdYH5Ww6122FHIXTAS5yBcz2CvHtsFIWN8vBYGZHo%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eea8e14489eea984f664f6bc8bb3d45a968f9b87c85287bac0d4b85b8a9ae5ccb52af0fea7c3b92af4b3bbb7ea7ca692acb0c15e81b586b7e44ba3f19e84c96ba9e9f9b0e7668598b8b0d964bcbd8588d646b7adb9aaf33b8e97acccd05af2e88b96ee41b4ec9ad5d660a6af8d82e239e989fad2d663abb19e87ca61b6aaa3d6cb47b1bc97a9b85db5eaffd3b14e8c9798b5c459f7a78e84f93a81aa8895f24e8b8982d9f54a9b9996a9ee37e2a3; gdxidpyhxdE=%5CSQfxqPLswGhHQkWaeqziJH113SBu%2B87SD%2ByEUsco%5CIL%2FpCYi8dfNwN6prCjgxD%2FL9uUnPAMaH9m7RItN7P%2F%5CjhdJ6s5yM54QznWjYDgDAabyvfiVtLb616m59%2F7REbBvqN9SxyrKjPI1NsEWpWy2YbmI%2B%5CqP%2B7Eecb7lsWE8lZ%5CQp%5Cu%3A1667012947397; YD00000558929251%3AWM_NI=d9l9PqWZ04W0cPm6nuaQkN2%2FR7Cix7xJrv6G8x8OxLYm2e73LzLf0hRTEzf5I6PbSYQ124M%2FDcE%2FKyU%2BYuM6qHPfogH1L%2FQcCHVWyHIHtWlqpmKBauFngIYmTLFIr9xNZXY%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed9c84f889cafbae2259bb48aa7d15b839b8ab1d54783ef988fc953a38bae99c92af0fea7c3b92aa8e7a4dad37b958600d5d63ca190a3d7ed7fa38fa5afb12592e98d8afb3dbc96be97b54dfca8f8b0fb489bb3fe86b63990a68487b364928c8b9be53f8beaa083d25393effed5d02588bd8bd0ca7397f59796d03eb398a087ee6d8cef84d0d46981989ab8fc448b98bcb8ef7bb4b385a3e47f86b2a9aadc6798948aaaf133bc9296b9dc37e2a3; __csrf=880738687515b74fb700788c52270b8b; MUSIC_U=6acc1a5bb7fe3625dc22db7370d5570bbb40d86bd42b29f60c049e3db3398c4f993166e004087dd326a0f72a48558f6c6c17c85bdd7a8046672c525893c48e2b37ecc291c0801a2ad4dbf082a8813684; _iuqxldmzr_=32; playerid=98979907; JSESSIONID-WYYY=ReeUtuIMo5N4sNZQWIvASEdPBWwXp2Xvf3zGHnwm%5Csz2EAMOePH1qxiuJHyUZxErrcvSSntMzKc%2Fs88lzv7JPqtpvzftMTx6%2Fo4sTy4GvfiBPzdPomqXI%5CwQ%5C%5CbC0AGrR2zxyJFFiBH9Z3H0j8Hh2%2BOszJSxZO13fDuqukPQrigm1NzR%3A1667034584884',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
params = {
'csrf_token': 'c08dc13fbcff3a4a9285ed4250812a22',
}
ctx=open('Python/实战项目/爬虫网易云播放器/网易云.js','r').read()
song_list=[]
like_list=[]
# 个人喜爱歌单
def get_like_list():
like_encText=execjs.compile(ctx).call('get_like_encText')
like_encSecKey=execjs.compile(ctx).call('get_like_encSecKey')
like_data={
'params': like_encText,
'encSecKey': like_encSecKey,
}
like_url='https://music.163.com/weapi/v6/playlist/detail'
like_songs= requests.post(like_url, params=params,headers=headers, data=like_data).json()['playlist']['tracks']
for song in like_songs:
song_name=song['name']
id=song['id']
singer=song['ar'][0]['name']
song=get_song(id,song_name,singer)
like_list.append(song)
print(song)
with open('Python/实战项目/爬虫网易云播放器/我的喜欢.txt','w',encoding='utf-8') as f:
f.write(str(like_list)+",")
# 获取歌曲
def get_song(id,song_name,singer):
encText=execjs.compile(ctx).call('get_encText',id)
encSecKey=execjs.compile(ctx).call('get_encSecKey')
song_data = {
'params': encText,
'encSecKey': encSecKey,
}
song_url = 'https://music.163.com/weapi/song/enhance/player/url/v1'
song_data = requests.post(song_url, params=params,headers=headers, data=song_data).json()['data'][0]
song_id=song_data['id']
m4a_url=song_data['url']
song={
'id':song_id,
'name':song_name,
'singer':singer,
'url':m4a_url
}
if m4a_url !=None:
song['url']=f"http://music.163.com/song/media/outer/url?id={song_id}"
return song
主界面的代码
copyimport random
import requests
import execjs
import requests
import tkinter as tk
import os
import pygame as py
from pydub import AudioSegment
from pydub.playback import play
from playsound import playsound
from Likedsongs import I_liked_songs
headers = {
'referer': 'https://music.163.com/',
'cookie':'_ga=GA1.1.18448714.1632904553; _ntes_nuid=9c0d0f8e61f12c731b6fb04a2d2e279b; _ga_C6TGHFPQ1H=GS1.1.1632904553.1.0.1632904615.0; NMTID=00Ozo1wJ1fXcNyV6kiHvvcOtt5D20kAAAF8ZQy0RA; WNMCID=wsqenr.1633782907500.01.0; WEVNSM=1.0.0; WM_TID=dI1C5xAE2t1AURUEBUI78DgnQaSfP1on; usertrack=ezq0J2LYu3quZhxDA9yVAg==; ntes_kaola_ad=1; _ntes_nnid=9c0d0f8e61f12c731b6fb04a2d2e279b,1664203664905; __snaker__id=FcswSyk2djPmoVxA; YD00000558929251%3AWM_TID=S6hdsgMkCj1BRAQUQELVSiqMIXGKybbE; _9755xjdesxxd_=32; hb_MA-93D5-9AD06EA4329A_source=www.baidu.com; __root_domain_v=.163.com; _qddaz=QD.351866958934376; WM_NI=0muVkpfNdOBVCkJVaAa%2FRcJak77OdnGHxOZhxcKgWNuswIp1NId%2BMR28EuoKp4V4WTfqCac3%2BW61WiioRfKkvvm5HMsdYH5Ww6122FHIXTAS5yBcz2CvHtsFIWN8vBYGZHo%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eea8e14489eea984f664f6bc8bb3d45a968f9b87c85287bac0d4b85b8a9ae5ccb52af0fea7c3b92af4b3bbb7ea7ca692acb0c15e81b586b7e44ba3f19e84c96ba9e9f9b0e7668598b8b0d964bcbd8588d646b7adb9aaf33b8e97acccd05af2e88b96ee41b4ec9ad5d660a6af8d82e239e989fad2d663abb19e87ca61b6aaa3d6cb47b1bc97a9b85db5eaffd3b14e8c9798b5c459f7a78e84f93a81aa8895f24e8b8982d9f54a9b9996a9ee37e2a3; gdxidpyhxdE=%5CSQfxqPLswGhHQkWaeqziJH113SBu%2B87SD%2ByEUsco%5CIL%2FpCYi8dfNwN6prCjgxD%2FL9uUnPAMaH9m7RItN7P%2F%5CjhdJ6s5yM54QznWjYDgDAabyvfiVtLb616m59%2F7REbBvqN9SxyrKjPI1NsEWpWy2YbmI%2B%5CqP%2B7Eecb7lsWE8lZ%5CQp%5Cu%3A1667012947397; YD00000558929251%3AWM_NI=d9l9PqWZ04W0cPm6nuaQkN2%2FR7Cix7xJrv6G8x8OxLYm2e73LzLf0hRTEzf5I6PbSYQ124M%2FDcE%2FKyU%2BYuM6qHPfogH1L%2FQcCHVWyHIHtWlqpmKBauFngIYmTLFIr9xNZXY%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed9c84f889cafbae2259bb48aa7d15b839b8ab1d54783ef988fc953a38bae99c92af0fea7c3b92aa8e7a4dad37b958600d5d63ca190a3d7ed7fa38fa5afb12592e98d8afb3dbc96be97b54dfca8f8b0fb489bb3fe86b63990a68487b364928c8b9be53f8beaa083d25393effed5d02588bd8bd0ca7397f59796d03eb398a087ee6d8cef84d0d46981989ab8fc448b98bcb8ef7bb4b385a3e47f86b2a9aadc6798948aaaf133bc9296b9dc37e2a3; __csrf=880738687515b74fb700788c52270b8b; MUSIC_U=6acc1a5bb7fe3625dc22db7370d5570bbb40d86bd42b29f60c049e3db3398c4f993166e004087dd326a0f72a48558f6c6c17c85bdd7a8046672c525893c48e2b37ecc291c0801a2ad4dbf082a8813684; _iuqxldmzr_=32; playerid=98979907; JSESSIONID-WYYY=ReeUtuIMo5N4sNZQWIvASEdPBWwXp2Xvf3zGHnwm%5Csz2EAMOePH1qxiuJHyUZxErrcvSSntMzKc%2Fs88lzv7JPqtpvzftMTx6%2Fo4sTy4GvfiBPzdPomqXI%5CwQ%5C%5CbC0AGrR2zxyJFFiBH9Z3H0j8Hh2%2BOszJSxZO13fDuqukPQrigm1NzR%3A1667034584884',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
params = {
'csrf_token': 'c08dc13fbcff3a4a9285ed4250812a22',
}
ctx=open('Python/实战项目/爬虫网易云播放器/网易云.js','r').read()
song_list=[]
# 个人喜爱歌单
def get_like_list():
lab=tk.Label(root,text="猜你喜欢",font=('kaiti',16))
lab.grid(row=2,column=0,columnspan=4)
song_list=random.sample(I_liked_songs,10)
show(song_list)
# 搜索歌单
def get_song_list():
query=var.get()
list_encText=execjs.compile(ctx).call('get_list_encText',query)
list_encSecKey=execjs.compile(ctx).call('get_list_encSecKey')
list_data={
'params': list_encText,
'encSecKey': list_encSecKey,
}
search_url='https://music.163.com/weapi/cloudsearch/get/web'
songs= requests.post(search_url, params=params,headers=headers, data=list_data).json()['result']['songs']
for i,song in enumerate(songs):
song_name=song['name']
id=song['id']
singer=song['ar'][0]['name']
song=get_song(id,song_name,singer)
print(song)
song_list.append(song)
if i==9:
break
lab=tk.Label(root,text="以下是搜索结果",font=('kaiti',16))
lab.grid(row=2,column=0,columnspan=4)
show(song_list)
# 获取歌曲
def get_song(id,song_name,singer):
encText=execjs.compile(ctx).call('get_encText',id)
encSecKey=execjs.compile(ctx).call('get_encSecKey')
song_data = {
'params': encText,
'encSecKey': encSecKey,
}
song_url = 'https://music.163.com/weapi/song/enhance/player/url/v1'
song_data = requests.post(song_url, params=params,headers=headers, data=song_data).json()['data'][0]
song_id=song_data['id']
m4a_url=song_data['url']
song={
'id':song_id,
'name':song_name,
'singer':singer,
'url':m4a_url
}
if m4a_url:
song['url']=f"http://music.163.com/song/media/outer/url?id={song_id}"
return song
# 显示搜索结果
def show(song_list):
lab=tk.Label(root,width=10,text="歌曲ID",font=('heiti',12))
lab.grid(row=3,column=0)
lab=tk.Label(root,width=25,text="歌名",font=('heiti',12))
lab.grid(row=3,column=1)
lab=tk.Label(root,width=15,text="歌手",font=('heiti',12))
lab.grid(row=3,column=2)
btn=tk.Button(root,width=10,text="刷新列表",font=('heiti',12),command=get_like_list)
btn.grid(row=3,column=3)
for i,song in enumerate(song_list):
lab=tk.Label(root,width=10,text=song['id'],font=('songti',12))
lab.grid(row=4+i,column=0)
lab=tk.Label(root,width=25,text=song['name'],anchor='w',font=('songti',12))
lab.grid(row=4+i,column=1,sticky='w')
lab=tk.Label(root,width=15,text=song['singer'],anchor='w',font=('songti',12))
lab.grid(row=4+i,column=2,sticky='w')
if song['url'] is None:
btn=tk.Button(root,width=10,text="VIP尊享",font=('songti',12))
else:
btn=tk.Button(root,width=10,text="播放",font=('songti',12),command=lambda x=song:play_song(x))
btn.grid(row=4+i,column=3)
# 播放歌曲
def play_song(song):
url=song['url']
name=song['name']
id=song['id']
music_path=f'D:/56号妖精仓库/square/Python/实战项目/爬虫网易云播放器/{name}_{id}.mp3'
sound=requests.get(url).content
with open(music_path,'wb') as f:
f.write(sound)
ex = tk.Toplevel()
ex.geometry("240x30+660+260")
ex.title(name)
def delete_explain():
py.mixer.quit()
os.remove(music_path)
ex.destroy()
btn1=tk.Button(ex,width=10,text="继续",command=py.mixer.music.unpause)
btn1.grid(row=0,column=0)
btn2=tk.Button(ex,width=10,text="暂停",command=py.mixer.music.pause)
btn2.grid(row=0,column=1)
btn3=tk.Button(ex,width=10,text="结束",command=delete_explain)
btn3.grid(row=0,column=2)
ex.protocol('WM_DELETE_WINDOW',delete_explain)
py.mixer.init()
py.mixer.music.load(music_path)
py.mixer.music.play(-1, 0)
root=tk.Tk()
root.title("网易云音乐播放器")
root.iconphoto(True, tk.PhotoImage(file='Python/实战项目/爬虫网易云播放器/163.png'))
var=tk.StringVar()
var.set('')
lab=tk.Label(root,width=40,text=" 欢迎使用网易云播放器!请输入歌曲/歌手: ",font=('songti',12))
lab.grid(row=0,column=0,columnspan=2)
ent=tk.Entry(root,width=10,textvariable=var,font=('kaiti',14))
ent.grid(row=0,column=2)
btn=tk.Button(root,width=10,text="搜索音乐",font=('heiti',10),command=get_song_list)
btn.grid(row=0,column=3)
get_like_list()
l=tk.Label(root,text="***",font=('songti',10))
l.grid(row=1,column=0,columnspan=4)
root.mainloop()
js扣扣扣
copywindow=this;
const CryptoJS = require('crypto-js');
function RSAKeyPair(a, b, c) {
this.e = biFromHex(a),
this.d = biFromHex(b),
this.m = biFromHex(c),
this.chunkSize = 2 * biHighIndex(this.m),
this.radix = 16,
this.barrett = new BarrettMu(this.m)
}
function twoDigit(a) {
return (10 > a ? "0" : "") + String(a)
}
function encryptedString(a, b) {
for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e; )
c[e] = b.charCodeAt(e),
e++;
for (; 0 != c.length % a.chunkSize; )
c[e++] = 0;
for (f = c.length,
g = "",
e = 0; f > e; e += a.chunkSize) {
for (j = new BigInt,
h = 0,
i = e; i < e + a.chunkSize; ++h)
j.digits[h] = c[i++],
j.digits[h] += c[i++] << 8;
k = a.barrett.powMod(j, a.e),
l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),
g += l + " "
}
return g.substring(0, g.length - 1)
}
function decryptedString(a, b) {
var e, f, g, h, c = b.split(" "), d = "";
for (e = 0; e < c.length; ++e)
for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix),
g = a.barrett.powMod(h, a.d),
f = 0; f <= biHighIndex(g); ++f)
d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8);
return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
d
}
function setMaxDigits(a) {
maxDigits = a,
ZERO_ARRAY = new Array(maxDigits);
for (var b = 0; b < ZERO_ARRAY.length; b++)
ZERO_ARRAY[b] = 0;
bigZero = new BigInt,
bigOne = new BigInt,
bigOne.digits[0] = 1
}
function BigInt(a) {
this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),
this.isNeg = !1
}
function biFromDecimal(a) {
for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c); )
++c;
if (c == a.length)
d = new BigInt;
else {
for (e = a.length - c,
f = e % dpl10,
0 == f && (f = dpl10),
d = biFromNumber(Number(a.substr(c, f))),
c += f; c < a.length; )
d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),
c += dpl10;
d.isNeg = b
}
return d
}
function biCopy(a) {
var b = new BigInt(!0);
return b.digits = a.digits.slice(0),
b.isNeg = a.isNeg,
b
}
function biFromNumber(a) {
var c, b = new BigInt;
for (b.isNeg = 0 > a,
a = Math.abs(a),
c = 0; a > 0; )
b.digits[c++] = a & maxDigitVal,
a >>= biRadixBits;
return b
}
function reverseStr(a) {
var c, b = "";
for (c = a.length - 1; c > -1; --c)
b += a.charAt(c);
return b
}
function biToString(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = b,
d = biDivideModulo(a, c),
e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero); )
d = biDivideModulo(d[0], c),
digit = d[1].digits[0],
e += hexatrigesimalToChar[d[1].digits[0]];
return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {
var c, d, b = new BigInt;
for (b.digits[0] = 10,
c = biDivideModulo(a, b),
d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero); )
c = biDivideModulo(c[0], b),
d += String(c[1].digits[0]);
return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {
var b = 15
, c = "";
for (i = 0; 4 > i; ++i)
c += hexToChar[a & b],
a >>>= 4;
return reverseStr(c)
}
function biToHex(a) {
var d, b = "";
for (biHighIndex(a),
d = biHighIndex(a); d > -1; --d)
b += digitToHex(a.digits[d]);
return b
}
function charToHex(a) {
var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;
return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {
var d, b = 0, c = Math.min(a.length, 4);
for (d = 0; c > d; ++d)
b <<= 4,
b |= charToHex(a.charCodeAt(d));
return b
}
function biFromHex(a) {
var d, e, b = new BigInt, c = a.length;
for (d = c,
e = 0; d > 0; d -= 4,
++e)
b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));
return b
}
function biFromString(a, b) {
var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt;
for (f.digits[0] = 1,
g = a.length - 1; g >= d; g--)
h = a.charCodeAt(g),
i = charToHex(h),
j = biMultiplyDigit(f, i),
e = biAdd(e, j),
f = biMultiplyDigit(f, b);
return e.isNeg = c,
e
}
function biDump(a) {
return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biSubtract(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
d = 0,
f = 0; f < a.digits.length; ++f)
e = a.digits[f] + b.digits[f] + d,
c.digits[f] = 65535 & e,
d = Number(e >= biRadix);
c.isNeg = a.isNeg
}
return c
}
function biSubtract(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biAdd(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
e = 0,
f = 0; f < a.digits.length; ++f)
d = a.digits[f] - b.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
if (-1 == e) {
for (e = 0,
f = 0; f < a.digits.length; ++f)
d = 0 - c.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
c.isNeg = !a.isNeg
} else
c.isNeg = a.isNeg
}
return c
}
function biHighIndex(a) {
for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; )
--b;
return b
}
function biNumBits(a) {
var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit;
for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)
c <<= 1;
return e
}
function biMultiply(a, b) {
var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b);
for (k = 0; f >= k; ++k) {
for (d = 0,
i = k,
j = 0; e >= j; ++j,
++i)
h = c.digits[i] + a.digits[j] * b.digits[k] + d,
c.digits[i] = h & maxDigitVal,
d = h >>> biRadixBits;
c.digits[k + e + 1] = d
}
return c.isNeg = a.isNeg != b.isNeg,
c
}
function biMultiplyDigit(a, b) {
var c, d, e, f;
for (result = new BigInt,
c = biHighIndex(a),
d = 0,
f = 0; c >= f; ++f)
e = result.digits[f] + a.digits[f] * b + d,
result.digits[f] = e & maxDigitVal,
d = e >>> biRadixBits;
return result.digits[1 + c] = d,
result
}
function arrayCopy(a, b, c, d, e) {
var g, h, f = Math.min(b + e, a.length);
for (g = b,
h = d; f > g; ++g,
++h)
c[h] = a[g]
}
function biShiftLeft(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = d.digits.length - 1,
h = g - 1; g > 0; --g,
--h)
d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;
return d.digits[0] = d.digits[g] << e & maxDigitVal,
d.isNeg = a.isNeg,
d
}
function biShiftRight(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = 0,
h = g + 1; g < d.digits.length - 1; ++g,
++h)
d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;
return d.digits[d.digits.length - 1] >>>= e,
d.isNeg = a.isNeg,
d
}
function biMultiplyByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),
c
}
function biDivideByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),
c
}
function biModuloByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, 0, b),
c
}
function biCompare(a, b) {
if (a.isNeg != b.isNeg)
return 1 - 2 * Number(a.isNeg);
for (var c = a.digits.length - 1; c >= 0; --c)
if (a.digits[c] != b.digits[c])
return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
return 0
}
function biDivideModulo(a, b) {
var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;
if (d > c)
return a.isNeg ? (f = biCopy(bigOne),
f.isNeg = !b.isNeg,
a.isNeg = !1,
b.isNeg = !1,
g = biSubtract(b, a),
a.isNeg = !0,
b.isNeg = e) : (f = new BigInt,
g = biCopy(a)),
new Array(f,g);
for (f = new BigInt,
g = a,
h = Math.ceil(d / bitsPerDigit) - 1,
i = 0; b.digits[h] < biHalfRadix; )
b = biShiftLeft(b, 1),
++i,
++d,
h = Math.ceil(d / bitsPerDigit) - 1;
for (g = biShiftLeft(g, i),
c += i,
j = Math.ceil(c / bitsPerDigit) - 1,
k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k); )
++f.digits[j - h],
g = biSubtract(g, k);
for (l = j; l > h; --l) {
for (m = l >= g.digits.length ? 0 : g.digits[l],
n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1],
o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2],
p = h >= b.digits.length ? 0 : b.digits[h],
q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1],
f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p),
r = f.digits[l - h - 1] * (p * biRadix + q),
s = m * biRadixSquared + (n * biRadix + o); r > s; )
--f.digits[l - h - 1],
r = f.digits[l - h - 1] * (p * biRadix | q),
s = m * biRadix * biRadix + (n * biRadix + o);
k = biMultiplyByRadixPower(b, l - h - 1),
g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),
g.isNeg && (g = biAdd(g, k),
--f.digits[l - h - 1])
}
return g = biShiftRight(g, i),
f.isNeg = a.isNeg != e,
a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),
b = biShiftRight(b, i),
g = biSubtract(b, g)),
0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),
new Array(f,g)
}
function biDivide(a, b) {
return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {
return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {
return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {
for (var c = bigOne, d = a; ; ) {
if (0 != (1 & b) && (c = biMultiply(c, d)),
b >>= 1,
0 == b)
break;
d = biMultiply(d, d)
}
return c
}
function biPowMod(a, b, c) {
for (var d = bigOne, e = a, f = b; ; ) {
if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),
f = biShiftRight(f, 1),
0 == f.digits[0] && 0 == biHighIndex(f))
break;
e = biMultiplyMod(e, e, c)
}
return d
}
function BarrettMu(a) {
this.modulus = biCopy(a),
this.k = biHighIndex(this.modulus) + 1;
var b = new BigInt;
b.digits[2 * this.k] = 1,
this.mu = biDivide(b, this.modulus),
this.bkplus1 = new BigInt,
this.bkplus1.digits[this.k + 1] = 1,
this.modulo = BarrettMu_modulo,
this.multiplyMod = BarrettMu_multiplyMod,
this.powMod = BarrettMu_powMod
}
function BarrettMu_modulo(a) {
var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g);
for (h.isNeg && (h = biAdd(h, this.bkplus1)),
i = biCompare(h, this.modulus) >= 0; i; )
h = biSubtract(h, this.modulus),
i = biCompare(h, this.modulus) >= 0;
return h
}
function BarrettMu_multiplyMod(a, b) {
var c = biMultiply(a, b);
return this.modulo(c)
}
function BarrettMu_powMod(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = 1,
d = a,
e = b; ; ) {
if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),
e = biShiftRight(e, 1),
0 == e.digits[0] && 0 == biHighIndex(e))
break;
d = this.multiplyMod(d, d)
}
return c
}
var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),
dpl10 = 15,
lr10 = biFromNumber(1e15),
hexatrigesimalToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"),
hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),
highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),
lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535);
function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)
e = Math.random() * b.length,
e = Math.floor(e),
c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
function e(a, b, d, e) {
var f = {};
return f.encText = c(a + e, b, d),
f
}
window.asrsea = d,
window.ecnonasr = e
pa_e='010001'
pa_f='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
pa_g='0CoJUm6Qyw8W8jud'
pa_i='vIh9NqhrNQYqF3rD'
get_like_encText=function(){
pa_d='{"id":"7053185814","offset":"0","total":"true","limit":"1000","n":"1000","csrf_token":"880738687515b74fb700788c52270b8b"}'
h_encText=b(pa_d, pa_g)
like_encText = b(h_encText,pa_i);
return like_encText;
}
console.log(get_like_encText())
get_like_encSecKey=function(){
pd_d='{"moduleName":"preload","csrf_token":"880738687515b74fb700788c52270b8b"}'
like_encSecKey = c(pa_i,pa_e,pa_f);
return like_encSecKey;
}
console.log(get_like_encSecKey())
pa_i="etalO0jto4hGfdDj"
get_list_encText=function(s){
pa_d='{"hlpretag":"<span class=\\"s-fc7\\">","hlposttag":"</span>","id":"65766","s":"'+s+'","type":"1","offset":"0","total":"true","limit":"30","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
h_encText=b(pa_d, pa_g)
list_encText = b(h_encText,pa_i);
return list_encText;
}
get_list_encSecKey=function(){
pd_d='{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52\\",\\"chromeVersion\\":106,\\"resourceId\\":5253801,\\"resourceType\\":\\"song\\"}}]","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
list_encSecKey = c(pa_i,pa_e,pa_f);
return list_encSecKey;
}
get_encText=function(id){
pa_d='{"ids":"['+id+']","level":"standard","encodeType":"aac","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
h_encText=b(pa_d, pa_g)
encText = b(h_encText,pa_i);
return encText;
}
get_encSecKey=function(){
pd_d='{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52\\",\\"chromeVersion\\":106,\\"resourceId\\":5253801,\\"resourceType\\":\\"song\\"}}]","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
encSecKey = c(pa_i,pa_e,pa_f);
return encSecKey;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了