用chrome訪問:http://finance.sina.com.cn/h5charts/tchart.html?symbol=sz300498&date=2019-07-05&rangeselector=true&indicator=tvol&from=wap
打開除錯器,搜索xh5_S_KLC_D,如下圖除錯,進入xh5_S_KLC_D方法

this.xh5_S_KLC_D = function(t) {
var e, n, i, o, r, a, s, l = (arguments,
864e5), c = 7657, u = [], h = [], d = ~(3 << 30), f = 1 << 30, p = [0, 3, 5, 6, 9, 10, 12, 15, 17, 18, 20, 23, 24, 27, 29, 30], g = Math, v = function() {
,
n[l + "_" + a] = (7 & r) + o["m" + a];
break
}
if (a = 15 & r,
0 == a ? n.d = N([6])[0] : 1 == a ? (o.d = a = N([1http://finance.sina.com.cn/sinafinancesdk/js/sf_sdk.js
請教各位,這是什么解密演算法,可以移植到其它語言嗎?難度怎樣?
參考文章:
新浪股票行情系統的解密_曹毅_CFA_FinTech_新浪博客
http://blog.sina.com.cn/s/blog_675cd6f60102ygip.html
uj5u.com熱心網友回復:
this.xh5_S_KLC_D = function(t) {
var e, n, i, o, r, a, s, l = (arguments,
864e5), c = 7657, u = [], h = [], d = ~(3 << 30), f = 1 << 30, p = [0, 3, 5, 6, 9, 10, 12, 15, 17, 18, 20, 23, 24, 27, 29, 30], g = Math, v = function() {
var l, c;
for (l = 0; 64 > l; l++)
h[l] = g.pow(2, l),
26 > l && (u[l] = m(l + 65),
u[l + 26] = m(l + 97),
10 > l && (u[l + 52] = m(l + 48)));
for (u.push("+", "/"),
u = u.join(""),
n = t.split(""),
i = n.length,
l = 0; i > l; l++)
n[l] = u.indexOf(n[l]);
return o = {},
e = a = 0,
r = {},
c = N([12, 6]),
s = 63 ^ c[1],
{
_1479: M,
_136: A,
_200: k,
_139: O,
_197: _mi_run,
_3466: _k2_run
}["_" + c[0]] || function() {
return []
}
}, m = String.fromCharCode, b = function(t) {
return t === {}._
}, y = function() {
var t, e;
for (t = _(),
e = 1; ; ) {
if (!_())
return e * (2 * t - 1);
e++
}
}, _ = function() {
var t;
return e >= i ? 0 : (t = n[e] & 1 << a,
a++,
a >= 6 && (a -= 6,
e++),
!!t)
}, N = function(t, o, r) {
var s, l, c, u, d;
for (l = [],
c = 0,
o || (o = []),
r || (r = []),
s = 0; s < t.length; s++)
if (u = t[s],
c = 0,
u) {
if (e >= i)
return l;
if (t[s] <= 0)
c = 0;
else if (t[s] <= 30) {
for (; d = 6 - a,
d = u > d ? d : u,
c |= (n[e] >> a & (1 << d) - 1) << t[s] - u,
a += d,
a >= 6 && (a -= 6,
e++),
u -= d,
!(0 >= u); )
;
o[s] && c >= h[t[s] - 1] && (c -= h[t[s]])
} else
c = N([30, t[s] - 30], [0, o[s]]),
r[s] || (c = c[0] + c[1] * h[30]);
l[s] = c
} else
l[s] = 0;
return l
}, x = function() {
var t;
return t = N([3])[0],
1 == t ? (o.d = N([18], [1])[0],
t = 0) : t || (t = N([6])[0]),
t
}, w = function(t) {
var e, n, i;
for (t > 1 && (e = 0),
e = 0; t > e; e++)
o.d++,
i = o.d % 7,
(3 == i || 4 == i) && (o.d += 5 - i);
return n = new Date,
n.setTime((c + o.d) * l),
n
}, S = function(t) {
var e, n, i;
for (i = o.wd || 62,
e = 0; t > e; e++)
do
o.d++;
while (!(i & 1 << (o.d % 7 + 10) % 7));
return n = new Date,
n.setTime((c + o.d) * l),
n
}, T = function(t) {
var e, n, i;
return t ? 0 > t ? (e = T(-t),
[-e[0], -e[1]]) : (e = t % 3,
n = (t - e) / 3,
i = [n, n],
e && i[e - 1]++,
i) : [0, 0]
}, C = function(t, e, n) {
var i, o, r;
for (o = "number" == typeof e ? T(e) : e,
r = T(n),
i = [r[0] - o[0], r[1] - o[1]],
o = 1; i[0] < i[1]; )
o *= 5,
i[1]--;
for (; i[1] < i[0]; )
o *= 2,
i[0]--;
if (o > 1 && (t *= o),
i = i[0],
t = _decnum(t),
0 > i) {
for (; t.length + i <= 0; )
t = "0" + t;
return i += t.length,
o = t.substr(0, i) - 0,
void 0 === n ? o + "." + t.substr(i) - 0 : (r = t.charAt(i) - 0,
r > 5 ? o++ : 5 == r && (t.substr(i + 1) - 0 > 0 ? o++ : o += 1 & o),
o)
}
for (; i > 0; i--)
t += "0";
return t - 0
}, k = function() {
var t, n, r, a, l;
if (s >= 1)
return [];
for (o.d = N([18], [1])[0] - 1,
r = N([3, 3, 30, 6]),
o.p = r[0],
o.ld = r[1],
o.cd = r[2],
o.c = r[3],
o.m = g.pow(10, o.p),
o.pc = o.cd / o.m,
n = [],
t = 0; a = {
d: 1
},
_() && (r = N([3])[0],
0 == r ? a.d = N([6])[0] : 1 == r ? (o.d = N([18])[0],
a.d = 0) : a.d = r),
l = {
date: w(a.d)
},
_() && (o.ld += y()),
r = N([3 * o.ld], [1]),
o.cd += r[0],
l.close = o.cd / o.m,
n.push(l),
!(e >= i) && (e != i - 1 || 63 & (o.c ^ t + 1)); t++)
;
return n[0].prevclose = o.pc,
n
}, A = function() {
var t, n, r, a, l, c, u, h, d, f, p;
if (s > 2)
return [];
for (u = [],
d = {
v: "volume",
p: "price",
a: "avg_price"
},
o.d = N([18], [1])[0] - 1,
h = {
date: w(1)
},
r = N(1 > s ? [3, 3, 4, 1, 1, 1, 5] : [4, 4, 4, 1, 1, 1, 3]),
t = 0; 7 > t; t++)
o[["la", "lp", "lv", "tv", "rv", "zv", "pp"][t]] = r[t];
for (o.m = g.pow(10, o.pp),
s >= 1 ? (r = N([3, 3]),
o.c = r[0],
r = r[1]) : (r = 5,
o.c = 2),
o.pc = N([6 * r])[0],
h.pc = o.pc / o.m,
o.cp = o.pc,
o.da = 0,
o.sa = o.sv = 0,
t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) {
for (l = {},
a = {},
f = o.tv ? _() : 1,
n = 0; 3 > n; n++)
if (p = ["v", "p", "a"][n],
(f ? _() : 0) && (r = y(),
o["l" + p] += r),
c = "v" == p && o.rv ? _() : 1,
r = N([3 * o["l" + p] + ("v" == p ? 7 * c : 0)], [!!n])[0] * (c ? 1 : 100),
a[p] = r,
"v" == p) {
if (!(l[d[p]] = r) && (s > 1 || 241 > t) && (o.zv ? !_() : 1)) {
a.p = 0;
break
}
} else
"a" == p && (o.da = (1 > s ? 0 : o.da) + a.a);
o.sv += a.v,
l[d.p] = (o.cp += a.p) / o.m,
o.sa += a.v * o.cp,
l[d.a] = b(a.a) ? t ? u[t - 1][d.a] : l[d.p] : o.sv ? ((g.floor((o.sa * (2e3 / o.m) + o.sv) / o.sv) >> 1) + o.da) / 1e3 : l[d.p] + o.da / 1e3,
u.push(l)
}
return u[0].date = h.date,
u[0].prevclose = h.pc,
u
}, M = function() {
var t, e, n, i, r, a, l;
if (s >= 1)
return [];
for (o.lv = 0,
o.ld = 0,
o.cd = 0,
o.cv = [0, 0],
o.p = N([6])[0],
o.d = N([18], [1])[0] - 1,
o.m = g.pow(10, o.p),
r = N([3, 3]),
o.md = r[0],
o.mv = r[1],
t = []; r = N([6]),
r.length; ) {
if (n = {
c: r[0]
},
i = {},
n.d = 1,
32 & n.c)
for (; ; ) {
if (r = N([6])[0],
63 == (16 | r)) {
l = 16 & r ? "x" : "u",
r = N([3, 3]),
n[l + "_d"] = r[0] + o.md,
n[l + "_v"] = r[1] + o.mv;
break
}
if (32 & r) {
a = 8 & r ? "d" : "v",
l = 16 & r ? "x" : "u",
n[l + "_" + a] = (7 & r) + o["m" + a];
break
}
if (a = 15 & r,
0 == a ? n.d = N([6])[0] : 1 == a ? (o.d = a = N([1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/16269.html
標籤:JavaScript
