feat: 匿名登录username算法

This commit is contained in:
binaryify 2023-08-21 18:24:48 +08:00
parent ac99ba5822
commit e528f93ef7
2 changed files with 25 additions and 3 deletions

1
app.js
View File

@ -1,6 +1,5 @@
#!/usr/bin/env node
async function start() {
// 如果需要手动修改anonymous_token需要注释generateConfig调用
require('./server').serveNcmApi({
checkVersion: true,
})

View File

@ -1,11 +1,34 @@
// 游客登录
const crypto = require('crypto')
const ID_XOR_KEY_1 = Buffer.from('3go8&$833h0k(2)2')
function cloudmusic_dll_encode_id(some_id) {
const xored = Buffer.from(
[...some_id].map(
(c, idx) => c.charCodeAt(0) ^ ID_XOR_KEY_1[idx % ID_XOR_KEY_1.length],
),
)
const digest = crypto.createHash('md5').update(xored).digest()
return digest.toString('base64')
}
function createRandomDeviceId() {
const t = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
const e = 6
let n = ''
for (let i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * e))
return n
}
module.exports = async (query, request) => {
query.cookie.os = 'iOS'
const deviceId = createRandomDeviceId()
const encodedId = Buffer.from(
`${deviceId} ${cloudmusic_dll_encode_id(deviceId)}`,
)
const username = encodedId.toString('base64')
const data = {
/* A base64 encoded string. */
username:
'MzEwMjcwYmY0Y2Y0ODcwMzU0ZDFkZmIxMmMzMGYyMTkgVlBaanMwNmtrb1BYMGxOVzVUMUJ3Zz09',
username: username,
}
let result = await request(
'POST',