使用Node.js模拟执行JavaScript

使用Node.js模拟执行JavaScript

模拟执行的是JavaScript,而且依赖的是Node.js,为什么不直接用Node.js来尝试JavaScript的执行呢?其实是完全可行的。

  1. 准备工作

确保已经正确安装好了Node.js。安装流程可以在小蜜蜂AI网站获取。

  1. 模拟执行

计算出每位球星所对应的加密字符串,思路是加载Crypto库并执行getToken方法,直接用Node.js实现。

把crypto-js.min.js文件中的内容复制下来,新建一个crypto.js文件并把内容粘贴进去。

获取crypto-js.min.js文件内容,进入示例网站:https://spa7.scrape.center/,打开开发者工具,在Sources选项卡下找到,crypto-js.min.js文件。如下图所示:

crypto.js文件的内容如下所示,代码太多,仅显示部分:

jsx 复制代码
!function(t, e) {
    "object" == typeof exports ? module.exports = exports = e() : "function" == typeof define && define.amd ? define([], e) : t.CryptoJS = e()
}(this, function() {
    var h, t, e, r, i, n, f, o, s, c, a, l, d, m, x, b, H, z, A, u, p, _, v, y, g, B, w, k, S, C, D, E, R, M, F, P, W, O, I, U, K, X, L, j, N, T, q, Z, V, G, J, $, Q, Y, tt, et, rt, it, nt, ot, st, ct, at, ht, lt, ft, dt, ut, pt, _t, vt, yt, gt, Bt, wt, kt, St, bt = bt || function(l) {
        var t;
        if ("undefined" != typeof window && window.crypto && (t = window.crypto),
        !t && "undefined" != typeof window && window.msCrypto && (t = window.msCrypto),
        !t && "undefined" != typeof global && global.crypto && (t = global.crypto),
        !t && "function" == typeof require)
      .....
      .....
                      }
        }
    },
    bt
});

将上图文件中的内容全部粘贴到新建文件crypto.js文件中。然后新建一个main.js文件,其内容如下:

jsx 复制代码
const CryptoJS = require("./crypto");
function getToken(player) {
      let key = CryptoJS.enc.Utf8.parse("fipFfVsZsTda94hJNKJfLoaqyqMZFFimwLt")
      const {name, birthday, height, weight} = player
      let base64Name = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(name))
      let encrypted = CryptoJS.DES.encrypt(`${base64Name}${birthday}${height}${weight}`, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7,
      });
      return encrypted.toString();
    }
    const player = [
  {
    name: '凯文-杜兰特',
    image: 'durant.png',
    birthday: '1988-09-29',
    height: '208cm',
    weight: '108.9KG'
  }
  console.log(getToken(player))

在crypto.js里面声明了导出(exports),导入就是用require实现,导入之后把它赋值给CryptoJS变量,其实它就代表整个CryptoJS加密算法库了,这样就完成了CryptoJS的初始化。因此,后面我们就能调用CryptoJS里面的DES、enc等各个对象的方法进行一些加密和编码操作了。接下来getToken方法其实就是调用CryptoJS里面的各个对象的方法,实现了整个加密流程。最后,传入player对象,然后输出对应的加密字符串即可。运行main.js,命令如下:

bash 复制代码
node main.js

结果如下:

bash 复制代码
bruce_liu@localhost node模拟 % node main.js 
DG1uMMq1M7OeHhds71HlSMHOoI2tFpWCB4ApP00cVFqptmlFKjFu9RluHo2w3mUw

这样就成功通过Node.js完成整个JavaScript的模拟过程。

更多体验可以在小蜜蜂AI网站https://zglg.work获取

相关推荐
码哥DFS13 分钟前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
满栀58532 分钟前
vue动态路由效果
前端·javascript·vue.js·前端框架·vue
quantdash_cc42 分钟前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
ydd1001001 小时前
寻找两个正序数组的中位数 Java 题解,二分分割详解
java·开发语言
半亩码田1 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
Wzx1980122 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
jjw_zyfx2 小时前
css vue vite实现闪烁的呼吸效果
javascript·css·vue.js
牧羊人.3332 小时前
Python 办公自动化从入门到入土|09 数据容器之字典
开发语言·python
sunly_2 小时前
React useActionState 的用法详解
前端·javascript·react.js
小僧景贤2 小时前
嵌入式C语言 第二篇:基础语法|嵌入式C与标准C的核心差异
c语言·开发语言·嵌入式c语言