python调用Javascript实践

一、背景知识

1、Node.js

javacript的运行环境有两个:浏览器、node.js

Node.js 是一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具!

Node.js 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使 Node.js 表现得非常出色。

运行js的命令: node app.js

2、npm

npm 是 Node.js 标准的软件包管理器。

在 2017 年 1 月时,npm 仓库中就已有超过 350000 个软件包,这使其成为世界上最大的单一语言代码仓库,并且可以确定几乎有可用于一切的软件包。

安装包的命令:npm install package

3、PyExecJS

一个python库,作用:Run JavaScript code from Python

官方文档 https://pypi.org/project/PyExecJS/

二、实践环节

1、环境准备

(1)pip install PyExecJS

(2)如果运行的js需要外部包,则需要在机器上先安装Node.js和npm(自行百度)

然后命令行npm install 所需的包,注意此步操作默认会在当前目录生成node_modules文件夹,用于存放npm下载的包

2、代码

(1)目录结构

(2)代码

import os
import execjs


os.environ["NODE_PATH"] = os.getcwd()
parser = execjs.compile("""
    function parse() {
        var cryptico = require("cryptico");
        let PassPhrase = new Date + "";
        let RSAKey = cryptico.generateRSAKey(PassPhrase, 1024);
        let PublicKeyString = cryptico.publicKeyString(RSAKey);
        let public_key = new Buffer.from(PublicKeyString, ).toString('base64');
        return public_key;
    }
    function parse1(pwd, challenge) {
        var cryptico = require("cryptico");
        var GibberishAES = require("./node_modules/gibberish-aes/dist/gibberish-aes-1.0.0.js");
        var password = 'admin';
        var challenge = challenge;
        let PassPhrase = new Date + "";
        let RSAKey = cryptico.generateRSAKey(PassPhrase, 1024);
        let CipherText = new Buffer.from(challenge, 'base64').toString();
        let DecryptionResult = cryptico.decrypt(CipherText, RSAKey);
        if (null !== DecryptionResult.plaintext) {
           let out = GibberishAES.enc(password, DecryptionResult.plaintext);
           let encString = new Buffer.from(out, 'utf-8').toString('base64');
        return encString;
        }
    }
""")
 
if __name__ == "__main__":
    obj = parser.call("parse")
    print ("public_key:" + obj)
    obj1 = parser.call("parse1", 'admin', 'NjV366/AgZ7tzdpeeR8jBX/jx4+MJJO+yzRZBEKKQBuYVO8eUyIOTUc1eZW9QnCNubTs1/bkUpEAK7Lqy06NWL7GrUfObO8YChZJ6/zMn5fQU3dumtSX6biGt1QP+rcDlzne/9BzYiwiMQ0XCLSCWR7/KgsRrHcecoeWNMGfPAo=')
    print ("encString:" + obj1)

posted @ 2024-02-23 14:58  碧之疾风  阅读(25)  评论(0编辑  收藏  举报