46 lines
1.8 KiB
JavaScript
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)));
|