426 lines
14 KiB
JavaScript
426 lines
14 KiB
JavaScript
/**
|
|
* @author Hmily
|
|
* @createTime 2024-10-10
|
|
*/
|
|
|
|
const id = 1;
|
|
const r = `${new Date().getTime()}${id}`
|
|
const Am = "LM6000101139961122666757";
|
|
const rl = "undefined"
|
|
|
|
function createRandom(length = 32) {
|
|
let result = "";
|
|
const characters = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";
|
|
for (let i = 0; i < length; ++i) {
|
|
const randomIndex = Math.floor(Math.random() * characters.length);
|
|
result += characters.charAt(randomIndex);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function createSignature(input = "4l4m5") {
|
|
let signature = "";
|
|
let number = 0;
|
|
for (let i = 0; i < input.length; ++i) {
|
|
const charCode = input.charCodeAt(i);
|
|
if (charCode >= 48 && charCode <= 57) {
|
|
number = number * 10 + (charCode - 48);
|
|
} else {
|
|
if (number !== 0) {
|
|
signature += createRandom(number);
|
|
number = 0;
|
|
}
|
|
signature += String.fromCharCode(charCode);
|
|
}
|
|
}
|
|
if (number !== 0) {
|
|
signature += createRandom(number);
|
|
}
|
|
return signature;
|
|
}
|
|
|
|
function oC(e) {
|
|
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e
|
|
}
|
|
var Tm = {
|
|
exports: {}
|
|
}
|
|
, Sm = {
|
|
exports: {}
|
|
};
|
|
(function() {
|
|
var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
, t = {
|
|
rotl: function(n, r) {
|
|
return n << r | n >>> 32 - r
|
|
},
|
|
rotr: function(n, r) {
|
|
return n << 32 - r | n >>> r
|
|
},
|
|
endian: function(n) {
|
|
if (n.constructor == Number)
|
|
return t.rotl(n, 8) & 16711935 | t.rotl(n, 24) & 4278255360;
|
|
for (var r = 0; r < n.length; r++)
|
|
n[r] = t.endian(n[r]);
|
|
return n
|
|
},
|
|
randomBytes: function(n) {
|
|
for (var r = []; n > 0; n--)
|
|
r.push(Math.floor(Math.random() * 256));
|
|
return r
|
|
},
|
|
bytesToWords: function(n) {
|
|
for (var r = [], s = 0, o = 0; s < n.length; s++,
|
|
o += 8)
|
|
r[o >>> 5] |= n[s] << 24 - o % 32;
|
|
return r
|
|
},
|
|
wordsToBytes: function(n) {
|
|
for (var r = [], s = 0; s < n.length * 32; s += 8)
|
|
r.push(n[s >>> 5] >>> 24 - s % 32 & 255);
|
|
return r
|
|
},
|
|
bytesToHex: function(n) {
|
|
for (var r = [], s = 0; s < n.length; s++)
|
|
r.push((n[s] >>> 4).toString(16)),
|
|
r.push((n[s] & 15).toString(16));
|
|
return r.join("")
|
|
},
|
|
hexToBytes: function(n) {
|
|
for (var r = [], s = 0; s < n.length; s += 2)
|
|
r.push(parseInt(n.substr(s, 2), 16));
|
|
return r
|
|
},
|
|
bytesToBase64: function(n) {
|
|
for (var r = [], s = 0; s < n.length; s += 3)
|
|
for (var o = n[s] << 16 | n[s + 1] << 8 | n[s + 2], i = 0; i < 4; i++)
|
|
s * 8 + i * 6 <= n.length * 8 ? r.push(e.charAt(o >>> 6 * (3 - i) & 63)) : r.push("=");
|
|
return r.join("")
|
|
},
|
|
base64ToBytes: function(n) {
|
|
n = n.replace(/[^A-Z0-9+\/]/ig, "");
|
|
for (var r = [], s = 0, o = 0; s < n.length; o = ++s % 4)
|
|
o != 0 && r.push((e.indexOf(n.charAt(s - 1)) & Math.pow(2, -2 * o + 8) - 1) << o * 2 | e.indexOf(n.charAt(s)) >>> 6 - o * 2);
|
|
return r
|
|
}
|
|
};
|
|
Sm.exports = t
|
|
}
|
|
)();
|
|
var iC = Sm.exports
|
|
, nl = {
|
|
utf8: {
|
|
stringToBytes: function(e) {
|
|
return nl.bin.stringToBytes(unescape(encodeURIComponent(e)))
|
|
},
|
|
bytesToString: function(e) {
|
|
return decodeURIComponent(escape(nl.bin.bytesToString(e)))
|
|
}
|
|
},
|
|
bin: {
|
|
stringToBytes: function(e) {
|
|
for (var t = [], n = 0; n < e.length; n++)
|
|
t.push(e.charCodeAt(n) & 255);
|
|
return t
|
|
},
|
|
bytesToString: function(e) {
|
|
for (var t = [], n = 0; n < e.length; n++)
|
|
t.push(String.fromCharCode(e[n]));
|
|
return t.join("")
|
|
}
|
|
}
|
|
}, sd = nl;
|
|
|
|
var aC = function(e) {
|
|
return e != null && (Cm(e) || lC(e) || !!e._isBuffer)
|
|
};
|
|
function Cm(e) {
|
|
return !!e.constructor && typeof e.constructor.isBuffer == "function" && e.constructor.isBuffer(e)
|
|
}
|
|
function lC(e) {
|
|
return typeof e.readFloatLE == "function" && typeof e.slice == "function" && Cm(e.slice(0, 0))
|
|
}
|
|
(function() {
|
|
var e = iC
|
|
, t = sd.utf8
|
|
, n = aC
|
|
, r = sd.bin
|
|
, s = function(o, i) {
|
|
o.constructor == String ? i && i.encoding === "binary" ? o = r.stringToBytes(o) : o = t.stringToBytes(o) : n(o) ? o = Array.prototype.slice.call(o, 0) : !Array.isArray(o) && o.constructor !== Uint8Array && (o = o.toString());
|
|
for (var a = e.bytesToWords(o), l = o.length * 8, c = 1732584193, u = -271733879, f = -1732584194, d = 271733878, m = 0; m < a.length; m++)
|
|
a[m] = (a[m] << 8 | a[m] >>> 24) & 16711935 | (a[m] << 24 | a[m] >>> 8) & 4278255360;
|
|
a[l >>> 5] |= 128 << l % 32,
|
|
a[(l + 64 >>> 9 << 4) + 14] = l;
|
|
for (var v = s._ff, w = s._gg, R = s._hh, y = s._ii, m = 0; m < a.length; m += 16) {
|
|
var b = c
|
|
, _ = u
|
|
, g = f
|
|
, C = d;
|
|
c = v(c, u, f, d, a[m + 0], 7, -680876936),
|
|
d = v(d, c, u, f, a[m + 1], 12, -389564586),
|
|
f = v(f, d, c, u, a[m + 2], 17, 606105819),
|
|
u = v(u, f, d, c, a[m + 3], 22, -1044525330),
|
|
c = v(c, u, f, d, a[m + 4], 7, -176418897),
|
|
d = v(d, c, u, f, a[m + 5], 12, 1200080426),
|
|
f = v(f, d, c, u, a[m + 6], 17, -1473231341),
|
|
u = v(u, f, d, c, a[m + 7], 22, -45705983),
|
|
c = v(c, u, f, d, a[m + 8], 7, 1770035416),
|
|
d = v(d, c, u, f, a[m + 9], 12, -1958414417),
|
|
f = v(f, d, c, u, a[m + 10], 17, -42063),
|
|
u = v(u, f, d, c, a[m + 11], 22, -1990404162),
|
|
c = v(c, u, f, d, a[m + 12], 7, 1804603682),
|
|
d = v(d, c, u, f, a[m + 13], 12, -40341101),
|
|
f = v(f, d, c, u, a[m + 14], 17, -1502002290),
|
|
u = v(u, f, d, c, a[m + 15], 22, 1236535329),
|
|
c = w(c, u, f, d, a[m + 1], 5, -165796510),
|
|
d = w(d, c, u, f, a[m + 6], 9, -1069501632),
|
|
f = w(f, d, c, u, a[m + 11], 14, 643717713),
|
|
u = w(u, f, d, c, a[m + 0], 20, -373897302),
|
|
c = w(c, u, f, d, a[m + 5], 5, -701558691),
|
|
d = w(d, c, u, f, a[m + 10], 9, 38016083),
|
|
f = w(f, d, c, u, a[m + 15], 14, -660478335),
|
|
u = w(u, f, d, c, a[m + 4], 20, -405537848),
|
|
c = w(c, u, f, d, a[m + 9], 5, 568446438),
|
|
d = w(d, c, u, f, a[m + 14], 9, -1019803690),
|
|
f = w(f, d, c, u, a[m + 3], 14, -187363961),
|
|
u = w(u, f, d, c, a[m + 8], 20, 1163531501),
|
|
c = w(c, u, f, d, a[m + 13], 5, -1444681467),
|
|
d = w(d, c, u, f, a[m + 2], 9, -51403784),
|
|
f = w(f, d, c, u, a[m + 7], 14, 1735328473),
|
|
u = w(u, f, d, c, a[m + 12], 20, -1926607734),
|
|
c = R(c, u, f, d, a[m + 5], 4, -378558),
|
|
d = R(d, c, u, f, a[m + 8], 11, -2022574463),
|
|
f = R(f, d, c, u, a[m + 11], 16, 1839030562),
|
|
u = R(u, f, d, c, a[m + 14], 23, -35309556),
|
|
c = R(c, u, f, d, a[m + 1], 4, -1530992060),
|
|
d = R(d, c, u, f, a[m + 4], 11, 1272893353),
|
|
f = R(f, d, c, u, a[m + 7], 16, -155497632),
|
|
u = R(u, f, d, c, a[m + 10], 23, -1094730640),
|
|
c = R(c, u, f, d, a[m + 13], 4, 681279174),
|
|
d = R(d, c, u, f, a[m + 0], 11, -358537222),
|
|
f = R(f, d, c, u, a[m + 3], 16, -722521979),
|
|
u = R(u, f, d, c, a[m + 6], 23, 76029189),
|
|
c = R(c, u, f, d, a[m + 9], 4, -640364487),
|
|
d = R(d, c, u, f, a[m + 12], 11, -421815835),
|
|
f = R(f, d, c, u, a[m + 15], 16, 530742520),
|
|
u = R(u, f, d, c, a[m + 2], 23, -995338651),
|
|
c = y(c, u, f, d, a[m + 0], 6, -198630844),
|
|
d = y(d, c, u, f, a[m + 7], 10, 1126891415),
|
|
f = y(f, d, c, u, a[m + 14], 15, -1416354905),
|
|
u = y(u, f, d, c, a[m + 5], 21, -57434055),
|
|
c = y(c, u, f, d, a[m + 12], 6, 1700485571),
|
|
d = y(d, c, u, f, a[m + 3], 10, -1894986606),
|
|
f = y(f, d, c, u, a[m + 10], 15, -1051523),
|
|
u = y(u, f, d, c, a[m + 1], 21, -2054922799),
|
|
c = y(c, u, f, d, a[m + 8], 6, 1873313359),
|
|
d = y(d, c, u, f, a[m + 15], 10, -30611744),
|
|
f = y(f, d, c, u, a[m + 6], 15, -1560198380),
|
|
u = y(u, f, d, c, a[m + 13], 21, 1309151649),
|
|
c = y(c, u, f, d, a[m + 4], 6, -145523070),
|
|
d = y(d, c, u, f, a[m + 11], 10, -1120210379),
|
|
f = y(f, d, c, u, a[m + 2], 15, 718787259),
|
|
u = y(u, f, d, c, a[m + 9], 21, -343485551),
|
|
c = c + b >>> 0,
|
|
u = u + _ >>> 0,
|
|
f = f + g >>> 0,
|
|
d = d + C >>> 0
|
|
}
|
|
return e.endian([c, u, f, d])
|
|
};
|
|
s._ff = function(o, i, a, l, c, u, f) {
|
|
var d = o + (i & a | ~i & l) + (c >>> 0) + f;
|
|
return (d << u | d >>> 32 - u) + i
|
|
}
|
|
,
|
|
s._gg = function(o, i, a, l, c, u, f) {
|
|
var d = o + (i & l | a & ~l) + (c >>> 0) + f;
|
|
return (d << u | d >>> 32 - u) + i
|
|
}
|
|
,
|
|
s._hh = function(o, i, a, l, c, u, f) {
|
|
var d = o + (i ^ a ^ l) + (c >>> 0) + f;
|
|
return (d << u | d >>> 32 - u) + i
|
|
}
|
|
,
|
|
s._ii = function(o, i, a, l, c, u, f) {
|
|
var d = o + (a ^ (i | ~l)) + (c >>> 0) + f;
|
|
return (d << u | d >>> 32 - u) + i
|
|
}
|
|
,
|
|
s._blocksize = 16,
|
|
s._digestsize = 16,
|
|
Tm.exports = function(o, i) {
|
|
if (o == null)
|
|
throw new Error("Illegal argument " + o);
|
|
var a = e.wordsToBytes(s(o, i));
|
|
return i && i.asBytes ? a : i && i.asString ? r.bytesToString(a) : e.bytesToHex(a)
|
|
}
|
|
}
|
|
)();
|
|
var cC = Tm.exports;
|
|
var t = {
|
|
utf8: {
|
|
stringToBytes: function(e) {
|
|
return nl.bin.stringToBytes(unescape(encodeURIComponent(e)))
|
|
},
|
|
bytesToString: function(e) {
|
|
return decodeURIComponent(escape(nl.bin.bytesToString(e)))
|
|
}
|
|
},
|
|
bin: {
|
|
stringToBytes: function(e) {
|
|
for (var t = [], n = 0; n < e.length; n++)
|
|
t.push(e.charCodeAt(n) & 255);
|
|
return t
|
|
},
|
|
bytesToString: function(e) {
|
|
for (var t = [], n = 0; n < e.length; n++)
|
|
t.push(String.fromCharCode(e[n]));
|
|
return t.join("")
|
|
}
|
|
}
|
|
};
|
|
|
|
const hC = (e, t, n=!1) => {
|
|
if (t.params) {
|
|
const o = {};
|
|
Object.keys(t.params).forEach(i => {
|
|
t.params[i] !== void 0 && t.params[i] !== null && (o[i] = t.params[i])
|
|
}
|
|
),
|
|
t.params = o
|
|
}
|
|
let r = {};
|
|
const s = t.method.toLowerCase();
|
|
if (s === "get")
|
|
t.params = Object.assign({}, e, t.params || {});
|
|
else if (s === "post")
|
|
if (typeof t.data == "string") {
|
|
let o;
|
|
t.data.split("&").forEach(i => {
|
|
o = i.split("="),
|
|
r[o[0]] = o[1]
|
|
}
|
|
),
|
|
r = Object.assign({}, e, r),
|
|
t.data = Object.keys(r).map(i => `${i}=${r[i]}`).join("&")
|
|
} else
|
|
r = Object.assign(r, e, t.data || {}),
|
|
t.data = r;
|
|
return n ? t : (r = Object.assign({}, t.params, r),
|
|
r)
|
|
}
|
|
|
|
const Rm = oC(cC);
|
|
const s = Rm(r);
|
|
|
|
pC = e => {
|
|
let t = Object.keys(e).sort().map(n => {
|
|
function r(s) {
|
|
return Array.isArray(s) ? s.join(",") : typeof s === "object" ? JSON.stringify(s) : s
|
|
}
|
|
return n + r(e[n])
|
|
}
|
|
).join("");
|
|
return t += Am + e.lm_s_ts + rl,
|
|
Rm(t)
|
|
}
|
|
|
|
|
|
// final encryption function
|
|
let CryptoJS = null;
|
|
lm_s_key = atob('ZGQ0NmRiYjQ0MmI2ZTRiYTgxN2Q2MzQ3ZDJkZGY0OTM=');
|
|
function requestSign(signParams, cryptoJSPath) {
|
|
let sKey = Object.keys(signParams).sort().map(key => {
|
|
function getValue(val) {
|
|
if (Array.isArray(val)) {
|
|
return val.join(',');
|
|
}
|
|
if (typeof val === 'object') {
|
|
return JSON.stringify(val);
|
|
}
|
|
return val;
|
|
}
|
|
return key + getValue(signParams[key]);
|
|
}).join('');
|
|
|
|
sKey += signParams.lm_s_id + signParams.lm_s_ts + lm_s_key;
|
|
console.log(`sKey: ${sKey}`);
|
|
CryptoJS = require(cryptoJSPath);
|
|
return CryptoJS.MD5(sKey).toString();
|
|
}
|
|
|
|
function sign(videoid, cryptoJSPath, platform='web'){
|
|
const vali = createSignature();
|
|
const data_e = {
|
|
lm_s_id: Am,
|
|
lm_s_ts: r,
|
|
lm_s_str: s,
|
|
lm_s_ver: 1,
|
|
h5: 1
|
|
};
|
|
/* data_e example value
|
|
const data_e = {
|
|
lm_s_id: Am,
|
|
lm_s_ts: "17284909009151",
|
|
lm_s_str: "88f9777231dc2d6ac462a1d7ebf5f54e",
|
|
lm_s_ver: 1,
|
|
h5: 1
|
|
};
|
|
*/
|
|
console.log("data_e:",data_e);
|
|
|
|
data_i = {
|
|
...data_e,
|
|
_time: new Date().valueOf(),
|
|
thirdchannel: 6,
|
|
videoid: videoid,
|
|
area: 'zh',
|
|
vali: vali
|
|
}
|
|
console.log("data_i:",data_i);
|
|
|
|
// fake lm_s_sign param value
|
|
let lm_s_sign = pC(data_i);
|
|
console.log(`fake lm_s_sign: ${lm_s_sign}`);
|
|
|
|
//finnal request params
|
|
/*
|
|
signParams = {
|
|
"alias": "liveme",
|
|
"tongdun_black_box": "iWPU21728483558afruvSVo6x0",
|
|
"os": "android",
|
|
"lm_s_id": "LM6000101139961122666757",
|
|
"lm_s_ts": "17284909009151",
|
|
"lm_s_str": "88f9777231dc2d6ac462a1d7ebf5f54e",
|
|
"lm_s_ver": 1,
|
|
"h5": 1,
|
|
"_time": 1728490664651,
|
|
"thirdchannel": 6,
|
|
"videoid": "17284844223282059697",
|
|
"area": "zh",
|
|
"vali": "zH8SlBwnCm4AZWp"
|
|
}#
|
|
//result: 4eaf71a1ec19b49b7267e4d16e007105
|
|
*/
|
|
signParams = {
|
|
"alias": "liveme",
|
|
"tongdun_black_box": "",
|
|
"os": platform,
|
|
...data_i
|
|
}
|
|
console.log("signParams: ", signParams);
|
|
lm_s_sign = requestSign(signParams, cryptoJSPath);
|
|
console.log(`\x1b[32mfinal lm_s_sign: \x1b[0m${lm_s_sign}\n`);
|
|
data = {
|
|
...signParams,
|
|
lm_s_sign
|
|
}
|
|
return data;
|
|
|
|
}
|
|
|
|
module.exports = {
|
|
sign
|
|
};
|