Python调用JS解密代码报错:如何排查execjs与crypto-js库的兼容性问题?

python调用js解密代码报错:如何排查execjs与crypto-js库的兼容性问题?

Python调用JS解密代码报错的排查与解决

在使用Python调用JavaScript代码进行解密时,即使参数正确,也可能遇到execjs.ProgramError。本文分析一个案例,并提供解决方案。

问题描述:

程序使用execjs库执行一段使用crypto-js库进行AES解密的JavaScript代码。尽管设置了UTF-8编码,但仍出现execjs.ProgramError

立即学习“Python免费学习笔记(深入)”;

Python代码片段:

import requestsimport execjsimport sysimport iosys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')# ... (requests代码省略) ...try:    response_text = response.content.decode('utf-8')    decrypted_text = execjs.compile(open('./decrypt.js', 'r', encoding='utf-8').read()).call('decrypt', response_text)    print("解密结果:", decrypted_text)except execjs.ProgramError as e:    print(f"JavaScript错误: {e}")# ... (其他异常处理省略) ...

JavaScript代码片段:

const CryptoJS = require('crypto-js');function decrypt(t) {    let key = 'rewin-swhysc1234';    let keyBytes = CryptoJS.enc.Utf8.parse(key);    let decrypted = CryptoJS.AES.decrypt(t, keyBytes, {        mode: CryptoJS.mode.ECB,        padding: CryptoJS.pad.Pkcs7    });    return decrypted.toString(CryptoJS.enc.Utf8);}

问题分析与解决方案:

问题可能源于execjscrypto-js的兼容性,以及execjs处理加密数据的限制。execjs并非直接运行JavaScript,而是通过Node.js等引擎,这可能导致兼容性问题。

建议:使用Python原生加密库替代execjscrypto-js Python的Crypto库提供AES加密解密功能,避免兼容性问题。

Python原生加密库解决方案:

from Crypto.Cipher import AESimport base64def decrypt(ciphertext):    key = b'rewin-swhysc1234'    cipher = AES.new(key, AES.MODE_ECB)    plaintext = cipher.decrypt(base64.b64decode(ciphertext))    return plaintext.decode('utf-8')

此Python函数使用Crypto.Cipher.AES进行AES解密,并用base64处理Base64编码的密文。这更直接高效,避免兼容性问题。

额外注意事项:

输入参数校验: JavaScript代码应增强输入参数t的校验,避免空值或格式错误导致解密失败。异常处理: 完善Python代码的异常处理,例如处理base64.b64decode可能抛出的异常。

通过使用Python原生加密库,可以提高代码效率和稳定性,并解决execjscrypto-js兼容性问题。 记住始终对输入数据进行严格的验证和处理,以确保程序的健壮性。

以上就是Python调用JS解密代码报错:如何排查execjs与crypto-js库的兼容性问题?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/169802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 01:48:35
下一篇 2025年11月1日 01:49:09

相关推荐

发表回复

登录后才能评论
关注微信