栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫执行js代码_js爬虫和python爬虫?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫执行js代码_js爬虫和python爬虫?

环境搭建 安装node.js

下载网站:Download | Node.jshttps://nodejs.org/en/download/

参考网站:Node.js安装与环境配置_各自安好、的博客-CSDN博客_nodejs安装及环境配置https://blog.csdn.net/qq_41465646/article/details/107656044

安装js代码调试工具 使用VScode可以调试JS代码: VScode安装: VSCode详细安装教程 - 是大壳子啊 - 博客园 (cnblogs.com)https://www.cnblogs.com/csji/p/13558221.html
VScode执行JS代码的环境配置: 在VSCode中直接运行js代码 - 简书 (jianshu.com)https://www.jianshu.com/p/3c47770c118b tips:VScode不会自动默认保存执行修改之后的代码,如果需要自动保存的话: settings‐‐> 把 off 修改为 onFocusChange。 安装 PyExecJs模块

安装pyexecjs模块可以在python中运行调试好的js的代码。

JS中常见的算法

  • 线性散列MD5算法
  • 对称加密DES/AES算法
  • 非对称加密算法RSA
  • base64加密算法

    MD5算法

    MD5是一种被广泛使用的线性散列算法,可以产出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)数据。

    JSMD5算法:

    https://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.jshttps://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.js

    MD5加密网站:

    md5在线解密破解,md5解密加密 (cmd5.com)https://www.cmd5.com/

    DES/AES算法

    DES对称加密,是一种比较传统的加密方式,其加密运算解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。

    AES和DES的区别

    1.加密后密文长度不同

    (1)DES加密后密文长度是8的整数倍;

    (2)AES加密后密文的长度是16的整数倍;

    2.安全度不同

    (1)一般情况下DES足够安全;

    (2)如果要求更高可以使用AES;

    3.DES和AES修改只需要修改:CryptoJS.DES =>CryptoJS.AES

    encrypt() 加密 decrypt() 解密

    一般情况下,在开发者工具中扣取JS代码时,如果没有password之类的关键字,可以直接search出encrypt和decrypt。

    RSA算法

    RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。

    非对称加密需要两个密钥:

  • 公开密钥(publickey:公钥)
  • 私有密钥(privatekey:私钥)
  • 公钥和私钥是一对 setPublicKey() 设置公钥(可以搜索该关键字) base64加密算法

    base64是一种用64个字符来表示任意二进制数据的方法。

    base64使用 A--Z a--z 0--9 + / 这64个字符实现对数据的加密。

    进行JS调试的流程 1. 调试工具 ( 黄条 ) 灰色箭头是执行当前的下一条语句 ,蓝色三角形是跳到下一 个断点处。 2. (1) 利用某个加密字段搜索:开发者工具右上角三个点 ‐‐> 选择 search‐‐> 搜索; (2) 点击进搜索结果里面 ‐‐> 点击左下角的花括号 进行格式化处理 ; (3) 在当前文件里面用鼠标及进行聚焦 ‐‐>ctrl+f 再次搜索加密字段 ; (4) 找到可疑的加密字段打上断点进行调试; 借助花括号下面的下划线找到函数开始和结束的位置。 3. (1)在加密字段中有Initiator,可以进入里面查看源码,注意最下面的是最早执行的,所以要从最上面开始逐一进入找到加密字段在其中是否被加密; (2)其余步骤与2中一致;

     4.

    (1)如果碰到加密算法不是很长,可以复制下所有的代码行;

    (2)如果加密代码比较长 ,如果没有JS的基础;最好使用python去重构一下加密过程(需要得到

    重构时所必须的一些参数 )。 (3)注意关键字:setPublicKey ‐‐‐> RSA;encrypt decrypt ‐‐> DES/AES                                                          Python重构AES加密算法
    from Crypto.Cipher import AES
    from cryptography.hazmat.primitives.padding import PKCS7
    from cryptography.hazmat.primitives.ciphers import algorithms
    
    def pkcs7_unpad(content):
        """
        解密:Pkcs7的填充方式
        """
        if not isinstance(content, bytes):
            content = content.encode()
        pad = PKCS7(algorithms.AES.block_size).unpadder()
        pad_content = pad.update(content) + pad.finalize()
        return pad_content
    
    
    def aes_encrypt(res, key, iv=''):
        # 转码  utf-8  字节 16进制
        new_key = bytes(key, encoding='utf-8')
        new_iv = bytes(iv, encoding='utf-8')
        # 创建一个AES算法 秘钥  模式 偏移值
        cipher = AES.new(new_key, AES.MODE_CBC, new_iv)
        # 解密
        data = cipher.decrypt(bytes.fromhex(res))
        # Pkcs7的填充方式
        return pkcs7_unpad(data)
    

    Python重构DES加密算法

    # pip install pyDes -i https://pypi.tuna.tsinghua.edu.cn/simple
    from pyDes import des, CBC, PAD_PKCS5, ECB
    import base64
    
    
    def des_encrypt(password, key, iv='', model='CBC'):
        '''
        DES加密
        :param password: 密码明文
        :param key: 密钥
        :param iv: 秘钥偏移量
        :param model: 加密模式 CBC ECB
        :return: 加密之后的数据
        '''
        # 创建des对象
        if model == 'CBC':
            # PAD_PKCS5 为填充方式
            des_obj = des(key[:8].encode('utf-8'), CBC, iv.encode('utf-8'), padmode=PAD_PKCS5)
        else:
            # ECB加密模式 不需要iv秘钥偏移量
            des_obj = des(key[:8].encode('utf-8'), ECB, padmode=PAD_PKCS5)
        # 通过des对象处理数据
        encrypt_content = des_obj.encrypt(password.encode('utf-8'))
        result = base64.b64encode(encrypt_content).decode()
        return result

    Python重构RAS加密算法

    # pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
    from Crypto.PublicKey import RSA
    from Crypto.Cipher import PKCS1_v1_5 as cry_pksc1_v1_5
    import base64
    
    
    def encrypto(pk, password):
        """
        使用公钥对密码进行加密处理
        :param pk: 公钥
        :param password: 明文密码
        :return: RAS加密之后的密码
        """
        public_key = "-----BEGIN PUBLIC KEY-----n{}n-----END PUBLIC KEY-----".format(pk)
        # 导入公钥 返回一个RSA秘钥对象
        rsakey = RSA.importKey(public_key)
        # 对需要加密的内容进行PKCS#1 v1.5加密
        cipher = cry_pksc1_v1_5.new(rsakey)
        # 使用公钥加密密码 密码必须是二进制
        miwen_encode = cipher.encrypt(password.encode())
        # 再使用base64对类似字节的对象进行编码
        cipher_text = base64.b64encode(miwen_encode).decode()
        return cipher_text

    5.安装JS外部资源库:

    (1)cd进项目目录

    (2)做国内资源映射:npm install ‐g cnpm ‐‐ registry=https://registry.npm.taobao.org

    (3)安装: cnpm install node‐jsencrypt

    6.过掉无限debug:

            第一种:设置条件断点:false         第二种:选择Never pause here         第三种:让页面所有断点都失效( 不推荐 )

    7.在用python执行js代码的时候 碰着IndexError: list index out of range的解决方法:

    在 python.exe 同级目录下面找到 Lib :里面有 subprocess.py 找到 init 里面的 encoding= 将那一行替换为pass_fds=(), *, encoding='utf‐8', errors=None, text=None): 8. 在使用 DES 做加密处理的时候 要注意模式和 iv 之间的关系 ( 了解即可 )         如果是用的CBC 加密模式 需要 iv         如果是用的EBC 加密模式 不需要 iv         至于是用的哪种模式 要去js 代码中看

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/783279.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号