Files

46 lines
1.8 KiB
JavaScript

// dqb 规格接口签名生成器(复刻自 dqb 页面 chunk-e94d3322 的 nt 函数)
// 用法: node dqb_sign.js <SeriesId> → 输出完整的 s 参数值
function shift(t, e) {
for (var s = 0; s < e.length - 2; s += 3) {
var r = e.charAt(s + 2);
r = r >= "a" ? r.charCodeAt(0) - 87 : Number(r);
r = "+" === e.charAt(s + 1) ? t >>> r : t << r;
t = "+" === e.charAt(s) ? (t + r) & 4294967295 : t ^ r;
}
return t;
}
function sign(t, e) { // t=随机串"AAAAAA.BBBBBB", e=SeriesId 字符串
if (e.length > 30) e = "" + e.substr(0, 10) + e.substr(Math.floor(e.length / 2) - 5, 10) + e.substr(-10, 10);
var u = t; // 页面 gtk 分支不触发(t 非 null)
var h = u.split("."), m = Number(h[0]) || 0, f = Number(h[1]) || 0;
var v = [], g = 0;
for (var A = 0; A < e.length; A++) {
var y = e.charCodeAt(A);
if (y < 128) v[g++] = y;
else if (y < 2048) { v[g++] = y >> 6 | 192; v[g++] = y >> 6 & 63 | 128; }
else {
if ((y & 64512) === 55296 && A + 1 < e.length && (e.charCodeAt(A + 1) & 64512) === 56320) {
y = 65536 + ((y & 1023) << 10) + (e.charCodeAt(++A) & 1023);
v[g++] = y >> 18 | 240; v[g++] = y >> 12 & 63 | 128;
} else { v[g++] = y >> 12 | 224; v[g++] = y >> 6 & 63 | 128; }
v[g++] = y & 63 | 128;
}
}
var b = m;
var C = "+-a^+6", S = "+-3^+b+-f";
for (var w = 0; w < v.length; w++) { b += v[w]; b = shift(b, C); }
b = shift(b, S);
b ^= f;
if (b < 0) b = 2147483648 + (b & 2147483647);
b %= 1e6;
return b.toString() + "." + (b ^ m);
}
function rnd6() {
var d = "0123456789", r = "";
for (var i = 0; i < 6; i++) r += d.charAt(Math.floor(Math.random() * d.length));
return r;
}
var sid = process.argv[2];
var ab = rnd6() + "." + rnd6();
console.log(sid + "." + ab + "." + sign(ab, String(sid)));