2401_82604128 2024-07-19 23:10 采纳率: 54.5%
浏览 4
已结题

逆向问题,JavaScript代码用python运行报错,如何解决?(相关搜索:python代码)

这个是JavaScript代码

/*! JSEncrypt v2.3.1 | https://npmcdn.com/jsencrypt@2.3.1/LICENSE.txt */
navigator = this
window = this

!function(t, e) {
    "function" == typeof define && define.amd ? define(["exports"], e) : e("object" == typeof exports && "string" != typeof exports.nodeName ? module.exports : t)
}(this, function(t) {
    function e(t, e, i) {
        null != t && ("number" == typeof t ? this.fromNumber(t, e, i) : null == e && "string" != typeof t ? this.fromString(t, 256) : this.fromString(t, e))
    }
    //中间代码太长省略了
    var ze = function(t) {
        t = t || {},
        this.default_key_size = parseInt(t.default_key_size) || 1024,
        this.default_public_exponent = t.default_public_exponent || "010001",
        this.log = t.log || !1,
        this.key = null
    };
    ze.prototype.setKey = function(t) {
        this.log && this.key && console.warn("A key was already set, overriding existing."),
        this.key = new _e(t)
    }
    ,
    ze.prototype.setPrivateKey = function(t) {
        this.setKey(t)
    }
    ,
    ze.prototype.setPublicKey = function(t) {
        this.setKey(t)
    }
    ,
    ze.prototype.decrypt = function(t) {
        try {
            return this.getKey().decrypt(Te(t))
        } catch (e) {
            return !1
        }
    }
    ,
    ze.prototype.encrypt = function(t) {
        try {
            return be(this.getKey().encrypt(t))
        } catch (e) {
            return !1
        }
    }
    ,
    ze.prototype.getKey = function(t) {
        if (!this.key) {
            if (this.key = new _e,
            t && "[object Function]" === {}.toString.call(t))
                return void this.key.generateAsync(this.default_key_size, this.default_public_exponent, t);
            this.key.generate(this.default_key_size, this.default_public_exponent)
        }
        return this.key
    }
    ,
    ze.prototype.getPrivateKey = function() {
        return this.getKey().getPrivateKey()
    }
    ,
    ze.prototype.getPrivateKeyB64 = function() {
        return this.getKey().getPrivateBaseKeyB64()
    }
    ,
    ze.prototype.getPublicKey = function() {
        return this.getKey().getPublicKey()
    }
    ,
    ze.prototype.getPublicKeyB64 = function() {
        return this.getKey().getPublicBaseKeyB64()
    }
    ,
    ze.version = "2.3.1",
    t.JSEncrypt = ze
});

function getPwd(key,pwd){
    var e = new JSEncrypt();
    key='MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjfeE0MIYsZes/HwV06/kvRw34Hmhn9WPt0feLPp1PVqdqZz1/xFvPPEAJ/lAvfqt5kyn+A06bvYXIhizTjlOzPgLE4897ihuSYXgfwcUshPZvydRLbftU6Exj5SLbv5tw4GInbgQv7RWLWOKyQA81q6lWae2Kcgd1XpDRsQNXVwIDAQAB'
    pwd = '123456'
    e.setPublicKey(key);
    var p =e.encrypt(pwd);}

python 报错:raise ProgramError(value)
execjs._exceptions.ProgramError: ReferenceError: JSEncrypt is not defined

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-19 23:11
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    要解决你的问题,我们可以分步进行:

    1. 理解问题:你遇到的问题是 JavaScript 代码在 Python 环境中运行时,由于 JSEncrypt 对象未定义而导致的 ReferenceError

    2. 使用 execjs:你已经尝试使用 execjs 库来执行 JavaScript 代码,但报错提示 JSEncrypt 不被定义。这可能是因为 execjs 需要一个全局的 JavaScript 环境,而你的代码是一个模块化的 JavaScript 代码。你可以尝试将整个 JavaScript 代码作为一个模块来加载和执行,但可能需要一些额外的配置。

    3. 转换 JavaScript 代码为 Python 代码:这是一个更直接的解决方案。你需要理解 JavaScript 中的 JSEncrypt 库是如何工作的,并找到 Python 中的等效库或实现。JSEncrypt 主要用于 RSA 加密和解密,Python 中的 cryptographypycryptodome 库可以提供类似的功能。

    4. 使用 Python 加密库:以下是使用 Python 的 cryptography 库进行 RSA 加密的一个简单示例:

    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives.asymmetric import rsa, padding
    from cryptography.hazmat.primitives import hashes
    
    # 生成 RSA 密钥对
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
        backend=default_backend()
    )
    
    public_key = private_key.public_key()
    
    # 加密
    message = b'Hello, World!'
    ciphertext = public_key.encrypt(
        message,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    print(ciphertext)
    
    1. 重构代码:如果你决定将 JavaScript 代码逻辑转换为 Python 代码,你需要逐个函数地理解 JavaScript 代码中的逻辑,并找到 Python 中的对应实现。这可能涉及到对数据结构、循环、条件语句等的转换。

    2. 查找替代方案:如果上述方法都不可行,你可以考虑寻找已经存在的 Python 库,这些库可能已经实现了你需要的加密功能。

    3. 测试和验证:无论你选择哪种方法,都需要确保转换后的代码能够正确执行,并与原始的 JavaScript 代码产生相同的结果。

    请注意,加密是一个复杂且敏感的领域,确保你了解你正在使用的加密方法的安全性和适用性。如果你不熟悉加密,可能需要进一步研究或咨询专业人士。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月21日
  • 创建了问题 7月19日

悬赏问题

  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 课上突考,本人大脑过载,求51单片机能手
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程
  • ¥15 C# webservice 参数特殊字符处理