| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- // 解密 sensor_data 值的密文部分 --------------------
- dec = '"QBkFI91H;-p!E9Do85,f+i/Z%l^-c!a0d/(e.t<fPL:FL;TJYYP0KvDo<2v[5^8k"i"_)K"m"FZ#qfX#wri6D$ju&dWL3)sWNgo! E3X<Bc66$B2.A44c"N"<x?"<+tUPyZAXy)Y6`8}o0q"A>D"h_U"^Aa"v"iifq"6yC"R&[")56DLNH`PZ)"wv[-":"d+w0M@"BZh"!qz"r3:ny")>"&""x"D|B"+", #dIZyfMRIz7c"9Wj"vUD"E9bmYor"(1"_CqDQ"wy"*Eu<h$]`rkM 5tca2!"+9V"/"f"<:r"2dv"K}H#}@x!@"D("n"Ae"7"{zs"&"","M$_"6"$"S(T"3G"]"~"Tx2"B1%"]""j".nW";R%E_"R3U"z&-cu"Y+8R"v"EWHkB;CAkR8+9VRd"3"r9X"fJh-Ooe]Dr"u7`"K""l"v+k"9""M"W$D"-=k.L"<$z~"%G)Fh[Lvr*"btb"q":X"f"S6Q"W""$"(g-"90sWSG&Tz*e>`f"@%h"M+@xy"{X!"7"o} rx"lN%"<(3"{""Z"WJ}"R""e"Ul"`hKQ<F-"Z5^"G/5^%":tw]"8"5DE7c(lQ"2J7"#6 "U""X$8"29c"}l7 6"H;"gI7=33JB"G%)">3zNe"2/1"q""3"iVg"7"C^_p~W""E"L#:"1P9{%nb`J"n=j"LuA0|9FMT$)6w-t,7G?GAE0wIp+nUg]p3XF=dneq}YhmijU/DQN@/4dEVIfB:xM:=~<O;[fEw*EPL/a.9F%XbP=D[GN-{e2HyS7nGg%KxO^&~LlT*2H).%>.^fvotP{&GvV"e"3a0"H]oY9<2;#mf"w{KO"7"Fke#wf!3Lo^zd&O`FwyslaQ4fm.<el=-2fSRrN.~pfnt%#!"JGA"%{e"M"r.gB^"0A["{x4"[v^*y;"t>I;"pgBwo"5%-">SAJi"7)o&"Y""f"Q~@"x@cxj"0]"|"5_-%._6dp4f1y;+|RAq>S(nz-0UfJbvD%h86*hfrt=|C}mD1(j{v5U?+87d#My.QB[-mx@}<K92A##t4kyx[b|Vi|-g)q:,];QUq7os!dA rUVH"z*S"0SB"z!Jy["qM9W"p.lM)O3flQbP_O* R"yl,"k<qg>7uf5v,JDHMwX",t<"XGK]`oCpSy f#Y"%ic2v7aXPwC3*"z"y/ "A Tz{eES"n[D"["?"4"H?x"c""R"Ums"6"S#+"V"S4F"V"4"`9P"`5a"o"#H"Usy"XzMs"~<2PeH|qmcW/G[a"_iku>"z"Ni1]D|_>LuBY;gBADi,cwRgE`6SDYY<cma]: [t-bo<9B@X$l)Y=w9 hyS%H2.%H"=(NM7:]<"e}E"oh(z{H=T"W.J"?I"7T%"|(m:_t@qgu!"OM["E""*"xrz","$H".sp"kW~I"Y[U[u6j,-B,}QxqFw|"fKzG"z.82#"yrLd"f""@zu"em=",!+Z{".AF"k""6"U}|"c`0"ZnG"<~)f4*0N"<ZT"Jr9a("*O3"Pw)Ar6"-3TVJ1l"F"TFvw+".%3"f{Q&L"}""."lLr"a.-"orJu"'
- arr = [3359553, 1111998]
- console.log(decrypt(dec, arr))
- function decrypt(dec, num_arr) {
- // mU 和 Dz:加密函数中使用的映射数组。
- var mU = [
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- 0,
- 1,
- -1,
- 2,
- 3,
- 4,
- 5,
- -1,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- -1,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91
- ],
- Dz = " !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"
- function reverseFun1(bF9, num) {
- // 将加密后的字符串拆分为数组
- const UM9Reversed = bF9.split(':');
- const n = UM9Reversed.length;
- // 模拟加密过程,记录所有交换对
- const swapPairs = [];
- let currentW59 = num;
- for (let hw9 = 0; hw9 < n; hw9++) {
- // 计算第一个索引 hj9
- const hj9 = (currentW59 >> 8 & 0xFFFF) % n;
- // 第一次更新 W59
- currentW59 = (currentW59 * 65793) & 0xFFFFFFFF;
- currentW59 += 4282663;
- currentW59 &= 0x7FFFFF; // 8388607 是 23 位掩码
- // 计算第二个索引 JO9
- const JO9 = (currentW59 >> 8 & 0xFFFF) % n;
- // 记录交换对
- swapPairs.push({hj9, JO9});
- // 第二次更新 W59
- currentW59 = (currentW59 * 65793) & 0xFFFFFFFF;
- currentW59 += 4282663;
- currentW59 &= 0x7FFFFF;
- }
- // 逆序交换对并执行交换
- swapPairs.reverse().forEach(({hj9, JO9}) => {
- // 交换元素还原
- const temp = UM9Reversed[hj9];
- UM9Reversed[hj9] = UM9Reversed[JO9];
- UM9Reversed[JO9] = temp;
- });
- // 拼接为原始字符串
- return UM9Reversed.join(':');
- }
- function reverseFun2(tv, BxInitial) {
- let Ig = '';
- const L = Dz.length;
- let currentBx = BxInitial;
- for (let sm = 0; sm < tv.length; sm++) {
- const c = tv.charAt(sm);
- // 计算当前tE和UE
- const tE = (currentBx >> 8) & 0xFFFF;
- const UE = tE % L;
- // 更新Bx为下一次迭代
- currentBx = (currentBx * 65793) & 0xFFFFFFFF;
- currentBx += 4282663;
- currentBx &= 0x7FFFFF; // 保留23位
- // 处理当前字符
- const k = Dz.indexOf(c);
- if (k === -1) {
- Ig += c;
- continue;
- }
- let pz = (k - UE) % L;
- if (pz < 0) pz += L;
- // 查找所有可能的Ad(32~126)
- let found = false;
- for (let Ad = 32; Ad < 127; Ad++) {
- if (mU[Ad] === pz) {
- Ig += String.fromCharCode(Ad);
- found = true;
- break;
- }
- }
- if (!found) Ig += c; // 未找到,保留原字符
- }
- return Ig;
- }
- let dec1 = reverseFun2(dec, num_arr[0])
- // console.log(a)
- return reverseFun1(dec1, num_arr[1])
- }
|