2026/4/4 5:47:24
网站建设
项目流程
洛江区住房和城乡建设局网站,长春网络公司排名,把百度科技园设置为公司地址,秦皇岛海三建设工程集团本文通过一个完整、可运行的示例#xff0c;演示如何在 Python 中使用 execjs 调用 CryptoJS 实现 AES 解密。 适合#xff1a;接口逆向、数据采集、前端加密分析等场景。 一、最终效果说明
我们要实现的效果是#xff1a;
前端#xff08;JS#xff09;用 CryptoJS AES…本文通过一个完整、可运行的示例演示如何在Python 中使用 execjs 调用 CryptoJS 实现 AES 解密。适合接口逆向、数据采集、前端加密分析等场景。一、最终效果说明我们要实现的效果是前端JS用CryptoJS AES-CBC加密 JSONPython 通过execjs 调用 JS 解密最终在 Python 中拿到原始 JSON 数据二、准备环境1️⃣ 安装 Node.jsnode-v如果没有sudoaptinstallnodejsnpm2️⃣ 安装 Python 依赖pipinstallPyExecJS3️⃣ 安装 CryptoJSJS 依赖在项目目录下执行npminit -ynpminstallcrypto-js三、项目目录结构aes-demo/ ├── encrypt.js # 模拟前端AES 加密 ├── decrypt.js # CryptoJS 解密函数 ├── decrypt.py # Python 调用 execjs └── cipher.txt # AES 密文四、模拟前端 AES 加密encrypt.js这一步是为了生成真实密文方便你测试实际项目中这一步通常是网站前端完成的constCryptoJSrequire(crypto-js);constkey1234567890abcdef;// 16 字节constivabcdef1234567890;// 16 字节constdata{user:admin,age:18,role:tester};constplaintextJSON.stringify(data);constencryptedCryptoJS.AES.encrypt(plaintext,CryptoJS.enc.Utf8.parse(key),{iv:CryptoJS.enc.Utf8.parse(iv),mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString();console.log(encrypted);运行nodeencrypt.jscipher.txt此时cipher.txt中就是 AES 密文。五、CryptoJS 解密函数decrypt.js⚠️execjs 只能调用全局函数constCryptoJSrequire(crypto-js);functiondecryptData(key,iv,ciphertext){constdecryptedCryptoJS.AES.decrypt(ciphertext,CryptoJS.enc.Utf8.parse(key),{iv:CryptoJS.enc.Utf8.parse(iv),mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});returndecrypted.toString(CryptoJS.enc.Utf8);}六、Python 调用 JS 解密decrypt.py这是核心代码importexecjsimportjsondefaes_decrypt(ciphertext):key1234567890abcdefivabcdef1234567890withopen(decrypt.js,r,encodingutf-8)asf:js_codef.read()ctxexecjs.compile(js_code)plaintextctx.call(decryptData,key,iv,ciphertext)returnplaintextif__name____main__:# 读取密文withopen(cipher.txt,r,encodingutf-8)asf:cipherf.read().strip()resultaes_decrypt(cipher)print(解密后的字符串)print(result)print(\n解析为 JSON)datajson.loads(result)print(data)七、运行结果示例解密后的字符串 {user:admin,age:18,role:tester} 解析为 JSON {user: admin, age: 18, role: tester}✅解密成功八、关键点总结一定要看 1. key / iv / mode / padding 必须一致任何一个不一致都会解密为空字符串JSON 解析失败 2. execjs 本质是「Python → Node」所以Node.js 必须可用crypto-js 必须能被require 3. 解密失败先不要json.loads先print(result)九、常见问题速查❌ 解密结果为空✔ key / iv 错✔ AES 模式不一致✔ padding 不一致❌ 报错 Cannot find module ‘crypto-js’npminstallcrypto-js❌ execjs 报 RuntimeUnavailableError说明Node.js 没装或不可用十、适用场景这个方案非常适合Web 接口 AES 逆向前端加密参数分析Python 自动化解密不想手写 AES 算法