哩哩啦啦噜噜 2022-07-26 13:31 采纳率: 0%
浏览 68
已结题

js加密算法用Python解密

下面这个js代码如果用python该怎么解密呢?最好把Python代码写上,有用必采纳

function encrypto(message){
    var key = 'MjBxZDAxNDQ=';
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
    mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}
  • 写回答

2条回答 默认 最新

  • IT.BOB Python领域优质创作者 2022-07-26 13:59
    关注
    获得2.50元问题酬金

    该加密算法是 DES,key 为密钥,没有偏移量 IV,ECB 模式,Pkcs7 填充方式,Python 在这方面能够直接调用的库比较少,据我所知只有 pyDes 和 Cryptodome 可以实现,pyDes 中 key 的长度要求是 8 位,你这个明显不符合,Cryptodome 不是很熟悉,可以自己搜一下,pyDes 代码示例如下:

    import binascii
    from pyDes import des, ECB, PAD_PKCS5
    
    
    def des_encrypt(key, t, iv):
        k = des(key, ECB, iv, pad=None, padmode=PAD_PKCS5)
        en = k.encrypt(t, padmode=PAD_PKCS5)
        return binascii.b2a_hex(en)
    
    
    def des_decrypt(key, t, iv):
        k = des(key, ECB, iv, pad=None, padmode=PAD_PKCS5)
        de = k.decrypt(binascii.a2b_hex(t), padmode=PAD_PKCS5)
        return de
    
    
    if __name__ == '__main__':
        secret_key = '12345678'   # 密钥
        text = 'I love Python!'   # 加密对象
        iv = None                 # 偏移量
        secret_str = des_encrypt(secret_key, text, iv)
        print('加密字符串:', secret_str)
        clear_str = des_decrypt(secret_key, secret_str, iv)
        print('解密字符串:', clear_str)
    

    据我经验来看,你应该是做爬虫 JS 逆向遇到了这种算法,通常情况下我们直接调用 nodejs 里面的 crypto-js 库来实现,不同语言不同库也有可能加密解密结果有不一致的情况,直接使用 nodejs 库来实现可以避免很多问题,而且 key 之类的也没有长度限制,nodejs 实现代码如下:

    // 引用 crypto-js 加密模块
    CryptoJS = require("crypto-js")
    
    var key = CryptoJS.enc.Utf8.parse("MjBxZDAxNDQ=");
    var iv = CryptoJS.enc.Utf8.parse("");
    
    function desEncrypt(word) {
        var srcs = CryptoJS.enc.Utf8.parse(word);
        var encrypted = CryptoJS.DES.encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
        });
        return encrypted.toString();
    }
    
    function desDecrypt(word) {
        var srcs = word;
        var decrypt = CryptoJS.DES.decrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
        });
        return decrypt.toString(CryptoJS.enc.Utf8);
    }
    
    console.log(desEncrypt("测试"))
    
    评论

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 用C语言完成一个小游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥15 如何用python读取nasa电池数据集?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题