python - execjs使用crypto-js
最近在研究一个网站发现网站使用了des加密,觉得使用python调用js可读性比较高,所以使用了以下方法来实现该网站的内容解密
1. 安装PyExecJS
pip3 install PyExecJs
2. 安装node.js
https://nodejs.org/en/download
3. node安装jsdom,crypto-js
可以到py文件目录在运行npm,方便调用
npm install jsdom
npm install crypto-js
4. 自定义js
var CryptoJS = require('crypto-js')
function decrypt(word) {
var key = CryptoJS.enc.Utf8.parse("密钥")
var iv = CryptoJS.enc.Utf8.parse("偏移量")
var decrypt = CryptoJS.DES.decrypt(
{
ciphertext: CryptoJS.enc.Hex.parse(word)
},
key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr;
}
5. 异常
在调用编写的js函数出现了异常 'NoneType' object has no attribute 'replace,解决办法,在import execjs前先加入以下代码,例如:
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs
6. 最终代码
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import os
import execjs
os.environ["EXECJS_RUNTIME"] = "Node"
with open(r"des.js", 'r', encoding='utf-8') as f:
context = execjs.compile(f.read(),cwd=r'./node_modules')
res = context.call("decrypt", '解密内容')
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个适用于 .NET 的开源整洁架构项目模板
· AI Editor 真的被惊到了
· API 风格选对了,文档写好了,项目就成功了一半!
· 【开源】C#上位机必备高效数据转换助手
· .NET 9.0 使用 Vulkan API 编写跨平台图形应用