decrypt_sensor_data.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. // 解密 sensor_data 值的密文部分 --------------------
  2. 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"'
  3. arr = [3359553, 1111998]
  4. console.log(decrypt(dec, arr))
  5. function decrypt(dec, num_arr) {
  6. // mU 和 Dz:加密函数中使用的映射数组。
  7. var mU = [
  8. -1,
  9. -1,
  10. -1,
  11. -1,
  12. -1,
  13. -1,
  14. -1,
  15. -1,
  16. -1,
  17. -1,
  18. -1,
  19. -1,
  20. -1,
  21. -1,
  22. -1,
  23. -1,
  24. -1,
  25. -1,
  26. -1,
  27. -1,
  28. -1,
  29. -1,
  30. -1,
  31. -1,
  32. -1,
  33. -1,
  34. -1,
  35. -1,
  36. -1,
  37. -1,
  38. -1,
  39. -1,
  40. 0,
  41. 1,
  42. -1,
  43. 2,
  44. 3,
  45. 4,
  46. 5,
  47. -1,
  48. 6,
  49. 7,
  50. 8,
  51. 9,
  52. 10,
  53. 11,
  54. 12,
  55. 13,
  56. 14,
  57. 15,
  58. 16,
  59. 17,
  60. 18,
  61. 19,
  62. 20,
  63. 21,
  64. 22,
  65. 23,
  66. 24,
  67. 25,
  68. 26,
  69. 27,
  70. 28,
  71. 29,
  72. 30,
  73. 31,
  74. 32,
  75. 33,
  76. 34,
  77. 35,
  78. 36,
  79. 37,
  80. 38,
  81. 39,
  82. 40,
  83. 41,
  84. 42,
  85. 43,
  86. 44,
  87. 45,
  88. 46,
  89. 47,
  90. 48,
  91. 49,
  92. 50,
  93. 51,
  94. 52,
  95. 53,
  96. 54,
  97. 55,
  98. 56,
  99. 57,
  100. -1,
  101. 58,
  102. 59,
  103. 60,
  104. 61,
  105. 62,
  106. 63,
  107. 64,
  108. 65,
  109. 66,
  110. 67,
  111. 68,
  112. 69,
  113. 70,
  114. 71,
  115. 72,
  116. 73,
  117. 74,
  118. 75,
  119. 76,
  120. 77,
  121. 78,
  122. 79,
  123. 80,
  124. 81,
  125. 82,
  126. 83,
  127. 84,
  128. 85,
  129. 86,
  130. 87,
  131. 88,
  132. 89,
  133. 90,
  134. 91
  135. ],
  136. Dz = " !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"
  137. function reverseFun1(bF9, num) {
  138. // 将加密后的字符串拆分为数组
  139. const UM9Reversed = bF9.split(':');
  140. const n = UM9Reversed.length;
  141. // 模拟加密过程,记录所有交换对
  142. const swapPairs = [];
  143. let currentW59 = num;
  144. for (let hw9 = 0; hw9 < n; hw9++) {
  145. // 计算第一个索引 hj9
  146. const hj9 = (currentW59 >> 8 & 0xFFFF) % n;
  147. // 第一次更新 W59
  148. currentW59 = (currentW59 * 65793) & 0xFFFFFFFF;
  149. currentW59 += 4282663;
  150. currentW59 &= 0x7FFFFF; // 8388607 是 23 位掩码
  151. // 计算第二个索引 JO9
  152. const JO9 = (currentW59 >> 8 & 0xFFFF) % n;
  153. // 记录交换对
  154. swapPairs.push({hj9, JO9});
  155. // 第二次更新 W59
  156. currentW59 = (currentW59 * 65793) & 0xFFFFFFFF;
  157. currentW59 += 4282663;
  158. currentW59 &= 0x7FFFFF;
  159. }
  160. // 逆序交换对并执行交换
  161. swapPairs.reverse().forEach(({hj9, JO9}) => {
  162. // 交换元素还原
  163. const temp = UM9Reversed[hj9];
  164. UM9Reversed[hj9] = UM9Reversed[JO9];
  165. UM9Reversed[JO9] = temp;
  166. });
  167. // 拼接为原始字符串
  168. return UM9Reversed.join(':');
  169. }
  170. function reverseFun2(tv, BxInitial) {
  171. let Ig = '';
  172. const L = Dz.length;
  173. let currentBx = BxInitial;
  174. for (let sm = 0; sm < tv.length; sm++) {
  175. const c = tv.charAt(sm);
  176. // 计算当前tE和UE
  177. const tE = (currentBx >> 8) & 0xFFFF;
  178. const UE = tE % L;
  179. // 更新Bx为下一次迭代
  180. currentBx = (currentBx * 65793) & 0xFFFFFFFF;
  181. currentBx += 4282663;
  182. currentBx &= 0x7FFFFF; // 保留23位
  183. // 处理当前字符
  184. const k = Dz.indexOf(c);
  185. if (k === -1) {
  186. Ig += c;
  187. continue;
  188. }
  189. let pz = (k - UE) % L;
  190. if (pz < 0) pz += L;
  191. // 查找所有可能的Ad(32~126)
  192. let found = false;
  193. for (let Ad = 32; Ad < 127; Ad++) {
  194. if (mU[Ad] === pz) {
  195. Ig += String.fromCharCode(Ad);
  196. found = true;
  197. break;
  198. }
  199. }
  200. if (!found) Ig += c; // 未找到,保留原字符
  201. }
  202. return Ig;
  203. }
  204. let dec1 = reverseFun2(dec, num_arr[0])
  205. // console.log(a)
  206. return reverseFun1(dec1, num_arr[1])
  207. }