python爬虫加解密分析及实现
第一种:
1、找到加密的接口地址,通过加密的接口地址全局搜索
2、通过打断点的方式,操作页面,跑到断点处时,即可找到加密串,如图二;
3、找到用的是哪种加密方式,如: crypto-js提供的AES加/解密方法,ECB模式 ,找到对应方式的加密语言加解密即可。





第二个案例参考:

第二种:
除了加解密外,还有一些签名是不能找现成的对标语言的,需要引用他们自己写的JS,前提需要找到他们关联的JS文件,然后拉下来。
引用方法;
#拉下来的sign.js文件如下:
function f(t) {for (var e = p ? "0123456789ABCDEF" : "0123456789abcdef", n = "", a = 0; a < 4 * t.length; a++)n += e.charAt(t[a >> 2] >> a % 4 * 8 + 4 & 15) + e.charAt(t[a >> 2] >> a % 4 * 8 & 15);return n
}
function hex_hmac_md5(t, e){return f(u(t, e))
}
function sign(t) {var i = hex_hmac_md5("GTO2OINTERFACE2017#@!%88", t);return i
}
#如何加载JS文件: runjs.py
import execjs2 import sys3 import os4 5 curPath = os.path.abspath(os.path.dirname(__file__))6 rootPath = os.path.split(curPath)[0]7 sys.path.append(rootPath)8 # 运行js文件9 def js_from_file():
10 with open(os.path.join(os.path.abspath(".."), "JSConfig/des3.js"), "r", encoding="UTF-8") as file:
11 result = file.read()
12 context = execjs.compile(result)
13 return context
14
15 def js_from_file1():
16 with open(os.path.join(os.path.abspath(".."), "JSConfig/sign.js"), "r", encoding="UTF-8") as file:
17 result = file.read()
18 context = execjs.compile(result)
19 return context
20
21 def js_from_md():
22 with open("../jsConfig/md.js", "r", encoding="UTF-8") as file:
23 result = file.read()
24 context = execjs.compile(result)
25 return context
26
27
28 if __name__ == '__main__':
29 md = js_from_md().call("md")
30 print(md)
#request.py中通过加载JS的方法去调用JS文件中的方法获取签名。# 获取签名def sign(self, request, requestType):data = XiangRuiBao().data(request, requestType)sign = js_from_file1().call("sign", data) #通过加载JS的方法去调用JS文件中的方法return sign# 定义加密方法def encrypt(self, data):bytes_str = str(data).encode('utf-8') # 将data转换为字节bas = base64.b64encode(bytes_str).decode('ascii')request1 = '{"requestPayload":"' + bas + '"}'encrypted = js_from_file().call("encrypt", self.key, request1) #通过加载JS的方法去调用JS文件中的方法return encrypted
参考链接:
https://blog.csdn.net/zhinian1204/article/details/124112512 加密文章

https://blog.csdn.net/cuilun000/article/details/125756232 加密文章
https://blog.csdn.net/qq_45664055/article/details/123348485?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169863513816800188585983%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169863513816800188585983&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-123348485-null-null.142^v96^pc_search_result_base9&utm_term=python%20ECB%E8%A7%A3%E5%AF%86&spm=1018.2226.3001.4187 AES加解密代码
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import padclass EncryptDate:def __init__(self, key):# 初始化密钥self.key = key# 初始化数据块大小self.length = AES.block_size# 初始化AES,ECB模式的实例self.aes = AES.new(self.key.encode("utf-8"), AES.MODE_ECB)# 截断函数,去除填充的字符self.unpad = lambda date: date[0:-ord(date[-1])]def fill_method(self, aes_str):'''pkcs7补全'''pad_pkcs7 = pad(aes_str.encode('utf-8'), AES.block_size, style='pkcs7')return pad_pkcs7def encrypt(self, encrData):# 加密函数,使用pkcs7补全res = self.aes.encrypt(self.fill_method(encrData))# 转换为base64msg = str(base64.b64encode(res), encoding="utf-8")return msgdef decrypt(self, decrData):# base64解码res = base64.decodebytes(decrData.encode("utf-8"))# 解密函数msg = self.aes.decrypt(res).decode("utf-8")return self.unpad(msg)if __name__ == '__main__':# key的长度需要补长(16倍数),补全方式根据情况而定,未补齐会报错# key字符长度决定加密结果,长度16:加密结果AES(128),长度32:结果就是AES(256)eg = EncryptDate("asdfghjklqwertyu")# 加密字符串长同样需要16倍数:需注意,不过代码中pad()方法里,帮助实现了补全(补全方式就是pkcs7)en = eg.encrypt("测试数据")de = eg.decrypt(en)print(f"加密结果:{en}")print(f"解密结果:{de}")相关文章:
python爬虫加解密分析及实现
第一种: 1、找到加密的接口地址,通过加密的接口地址全局搜索 2、通过打断点的方式,操作页面,跑到断点处时,即可找到加密串,如图二; 3、找到用的是哪种加密方式,如: cr…...
用Java做智能客服,基于私有知识库
构建Java智能客服系统的整体思路 使用Java构建智能客服系统的整体思路是: 首先将客服QA文档以Word形式导入到系统中,通过向量化处理存入知识库。 当用户提出问题时,系统会根据问题内容从知识库中检索相关的上下文信息,并结合大…...
软考(网工)——网络安全
文章目录 🕐网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 🕒Hash …...
如何给手机换ip地址
在当今数字化时代,IP地址作为设备在网络中的唯一标识,扮演着举足轻重的角色。然而,有时出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。本文将详细介绍几种实用的方法,帮助您轻松实现手机IP…...
kafkamanager安装
一.下载kafkamanager2.0 https://download.csdn.net/download/cyw8998/89892482 二.修改配置文件 解压缩 unzip kafka-manager-2.0.0.0.zip vim application.conf /opt/module/kafka-manager-2.0.0.0/conf/application.conf 添加以下内容:(连接zooke…...
笔记本电脑U口保护分享
在前司时候,经常遇到各种硬件类的问题,但是之前没时间分享,现在来给大家分享一下,常见的问题及如何保护。 1.接口接触不良。这个一般发生于使用时间长了,可以用细砂纸,轻轻摩擦后再进行尝试。 2.接口失灵…...
OpenCV高级图形用户界面(20)更改窗口的标题函数setWindowTitle()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,cv::setWindowTitle函数用于更改窗口的标题。这使得您可以在程序运行时动态地更改窗口的标题文本。 函数原型 void cv::…...
结构体指针的初始化以及结构体变量作为函数实参传递时易混淆的知识点
结构体指针初始化以及结构体变量作为函数实参传递时易混淆的知识点 首先要明确,结构体类型是用户自己定义的一种数据类型,其本质上与int, char等标准数据类型是一致的 **1.**因此,在进行结构体指针的初始化时,应该这样写&#x…...
Github 2024-10-20 php开源项目日报Top10
根据Github Trendings的统计,今日(2024-10-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Blade项目1Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数量:24281 次…...
C++ 算法学习——1.3 双向深度优先搜索
双向深度优先搜索(Bidirectional Depth-First Search)是一种图搜索算法,旨在通过从起始节点和目标节点同时开始,沿着深度优先搜索的路径向前探索,以减少搜索空间并提高搜索效率。 1. 基本原理 双向深度优先搜索同时从…...
Artistic Oil Paint 艺术油画着色器插件
只需轻轻一点,即可将您的视频游戏转化为艺术品!(也许更多…)。 ✓ 整个商店中最可配置的选项。 ✓ 六种先进算法。 ✓ 细节增强算法。 ✓ 完整的源代码(脚本和着色器)。 ✓ 包含在“艺术包”中。 …...
记一次left join联表查询的索引失效场景
结论:关联表的列的字符集不一致导致的 场景:user_t(用户表)、org_t(机构表),user_t的org_id和org_t的id是一对一关系 1.explain发现org_t表未走索引,但是org_t的id字段默认存在主键…...
从零到一:前端开发者学习 Cocos Creator 的全攻略
大家好,我是小蜗牛。 作为一名前端开发者,掌握 Cocos Creator 是一个非常有趣且充满潜力的技能。Cocos Creator 是一款免费开源的游戏开发引擎,它的工作流和前端开发非常相似,因此前端开发者可以较快上手,并通过开发小…...
JavaWeb 19 AJAX
目录 一、什么是AJAX 同步交互和异步交互 同步交互 异步交互 Ajax工作原理 Ajax实现方式 原生JavaScript方式进行ajax(了解): "我就是希望你好,就像很多人希望我好一样,特别简单,特别真挚。也不为了什么,就是希望…...
element plus中menu菜单技巧
我在使用element plus的menu(侧边栏)组件的过程中遇到了一些问题,就是menu编写样式和路由跳转,下面给大家分享以下,我是怎么解决的。 1.页面效果 我要实现的网站布局是这样的: 侧边栏折叠以后的效果&#…...
数据结构-贪心算法笔记
前言:贪心无套路,狠狠刷就完事 分发饼干 455. 分发饼干 - 力扣(LeetCode) class Solution {/*** 找出最多有多少个孩子可以得到糖果。** param g 一个数组,表示每个孩子对糖果大小的满意度。* param s 一个数组&…...
基于SpringBoot的在线汽车票预订平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理汽车票网上预订系统的相关信息成为必然。开…...
ubuntu 安装nginx
sudo apt-get update sudo apt-get install nginx sudo nginx -vsudo systemctl status nginx sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl restart nginx#浏览器输入:http://192.168.31.181/#查看文件结构 cd /etc/nginx sudo cp nginx.…...
fanuc远程PNS启动
参考 PNS & RSR区别 前者是8bit255 个程序 后者是bitN对应8个程序...
使用 Spring 框架构建 MVC 应用程序:初学者教程
Spring Framework 是一个功能强大、功能丰富且设计精良的 Java 平台框架。它提供了一系列编程和配置模型,旨在简化和精简 Java 中健壮且可测试的应用程序的开发过程。 人们常说 Java 太复杂了,构建简单的应用程序需要很长时间。尽管如此,Jav…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...
