当前位置: 首页 > article >正文

用Python+ddddocr搞定某税网滑块验证码,再拆解SM2/SM4/HMacSHA256加密全流程

Python实战国密算法与滑块验证的自动化登录全解析当开发者遇到集成了滑块验证和国密加密的复杂登录系统时传统爬虫手段往往束手无策。本文将完整演示如何用Python构建一个从滑块识别到加密处理的自动化登录系统重点解决SM2/SM4加密和HMacSHA256签名验证的技术难点。1. 环境准备与工具链搭建自动化登录系统需要几个关键组件协同工作。首先需要配置Python 3.8环境这是运行现代爬虫框架的基础版本要求。核心依赖库包括# requirements.txt ddddocr1.4.7 # 高精度滑块识别库 requests2.31.0 # HTTP请求库 execjs1.3.0 # 执行JavaScript代码 pycryptodome3.19.0 # 加密算法支持 sm-crypto0.3.2 # 国密算法实现安装时建议使用虚拟环境python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows pip install -r requirements.txt注意sm-crypto库需要Node.js环境支持Windows用户需先安装Node.js并配置PATH环境变量对于滑块识别ddddocr是目前效果最好的开源解决方案。测试数据显示在常见滑块验证场景下其识别准确率可达92%以上远高于传统OpenCV模板匹配的65%准确率。2. 滑块验证破解实战滑块验证的核心是计算滑块需要移动的距离。通过分析目标网站我们发现其采用典型的拼图滑块形式由背景图和滑块图两部分组成。2.1 获取验证码素材首先需要从接口获取滑块图片数据def get_captcha(session, headers, js_func, t): url https://example.com/api/captcha data {client_id: your_client_id} params js_func.call(get_params, data, t, 1) response session.post(url, headersheaders, datajson.dumps(params[o])) return json.loads(response.json()[datagram])返回的JSON中包含两个关键字段blockSrc: 滑块图的Base64编码canvasSrc: 背景图的Base64编码2.2 使用ddddocr计算滑动距离ddddocr的slide_match方法可以直接返回滑块需要移动的像素距离def calculate_slide_distance(target, background): ocr ddddocr.DdddOcr(detFalse, show_adFalse, ocrFalse) result ocr.slide_match( target_bytesbase64.b64decode(target.split(,)[-1]), background_bytesbase64.b64decode(background.split(,)[-1]) ) return result[target][0] # 返回x轴偏移量在实际测试中我们发现ddddocr对模糊、噪声干扰的滑块也有很好的鲁棒性。以下是不同场景下的识别效果对比干扰类型识别准确率平均误差(px)无干扰98%±2高斯模糊95%±5噪声干扰90%±8色相变化93%±63. 国密算法逆向解析目标网站采用了SM2、SM4和HMacSHA256组成的多层加密体系这是当前金融级应用的主流安全方案。3.1 SM2非对称加密处理SM2是我国自主设计的椭圆曲线公钥算法主要用于密钥交换。在登录流程中首先通过接口获取公钥def get_public_key(session): url https://example.com/api/publicKey response session.post(url) data response.json() return { uuid: data[uuid], publicKey: data[publicKey] }使用sm-crypto库进行SM2加密// JavaScript代码通过execjs执行 function sm2_encrypt(text, publicKey) { const sm2 require(sm-crypto).sm2; return sm2.doEncrypt(text, publicKey, 1); }Python调用方式def encrypt_with_sm2(js_func, text, public_key): return js_func.call(sm2_encrypt, text, public_key)3.2 SM4对称加密实现SM4是国标中的分组加密算法用于业务数据加密。密钥生成规则通常为密钥 随机数前8位 固定字符串O加密示例代码def sm4_encrypt(js_func, plaintext, key): return js_func.call(sm4_encrypt, plaintext, key) def sm4_decrypt(js_func, ciphertext, key): return js_func.call(sm4_decrypt, ciphertext, key)实际使用中发现不同系统对SM4的填充模式和处理方式可能有差异需要根据具体响应调整。3.3 HMacSHA256签名验证签名用于保证请求完整性生成公式为signature HMacSHA256(zipCode encryptCode datagram timestamp signtype, random_key)Python实现方案from Crypto.Hash import HMAC, SHA256 def generate_signature(message, key): hmac HMAC.new(key.encode(), digestmodSHA256) hmac.update(message.encode()) return hmac.hexdigest()4. 完整登录流程组装将各模块串联起来形成端到端的自动化登录方案初始化阶段获取SM2公钥和UUID生成随机密钥并SM2加密验证码阶段获取滑块图片ddddocr识别滑动距离提交验证结果并获取ticket登录阶段构造登录表单SM4加密敏感数据生成请求签名提交登录请求关键代码结构class TaxLogin: def __init__(self): self.session requests.Session() self.js self._load_js() def login(self, username, password): # 1. 初始化加密参数 public_info self._get_public_key() # 2. 处理滑块验证 captcha self._get_captcha() distance self._calculate_distance(captcha) ticket self._verify_captcha(distance) # 3. 执行登录 return self._account_login(username, password, ticket)在实际项目中还需要考虑以下优化点请求重试机制代理IP池集成验证码失败后的自动重试登录状态的持久化5. 常见问题与调试技巧在逆向这类复杂系统时开发者常会遇到各种意外情况。以下是几个典型问题的解决方案问题1SM4解密失败可能原因密钥生成规则不一致密文未正确Base64解码加密模式不匹配CBC/ECB问题2滑块识别偏差大解决方案调整ddddocr参数ocr ddddocr.DdddOcr( detFalse, show_adFalse, ocrFalse, threshold0.3 # 调整匹配阈值 )添加人工校验环节尝试多次获取验证码问题3签名验证不通过检查点时间戳格式是否为yyyyMMddHHmmss所有参与签名字段是否按固定顺序拼接随机密钥是否全程保持一致在开发过程中建议使用Mitmproxy等工具抓包分析确保每个环节的参数构造完全符合服务器预期。对于加密操作可以保存各阶段的明文和密文方便对比调试。

相关文章:

用Python+ddddocr搞定某税网滑块验证码,再拆解SM2/SM4/HMacSHA256加密全流程

Python实战:国密算法与滑块验证的自动化登录全解析 当开发者遇到集成了滑块验证和国密加密的复杂登录系统时,传统爬虫手段往往束手无策。本文将完整演示如何用Python构建一个从滑块识别到加密处理的自动化登录系统,重点解决SM2/SM4加密和HMac…...

计算机毕业设计springboot展会门票系统 基于SpringBoot的会展票务数字化服务平台 SpringBoot框架下的博览会入场券预约与核销系统

计算机毕业设计springboot展会门票系统 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着会展经济的蓬勃发展和数字化转型的深入推进,各类展会活动规模不断扩大&am…...

计算机毕业设计springboot长春的地铁综合服务管理系统 基于SpringBoot的城市轨道交通智慧运维管理平台 SpringBoot框架下的地铁运营调度与设备管控系统

计算机毕业设计springboot长春的地铁综合服务管理系统 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着城市化进程的加速推进,长春市作为东北地区的重要交通枢纽&…...

从85分到95+:复盘我在科大奥锐虚拟仿真实验平台踩过的那些‘坑’

从85分到95:科大奥锐虚拟仿真实验平台的实战避坑指南 第一次接触科大奥锐虚拟仿真实验平台时,我和大多数同学一样,以为这不过是传统实验的电子版。直到连续三次实验分数卡在85分上下,才意识到这个平台对操作细节的严苛程度远超预期…...

CSS动画实战:5分钟搞定微信语音发送震动效果(附完整代码)

CSS动画实战:5分钟实现语音波形震动效果 最近在做一个社交类项目时,产品经理突然提出要在语音消息发送时加入波形动画效果,要求"要有微信那种专业感"。作为前端开发者,我第一反应就是:这得用Canvas吧&#x…...

Video-subtitle-remover:让视频创作者实现硬字幕无痕去除的AI解决方案

Video-subtitle-remover:让视频创作者实现硬字幕无痕去除的AI解决方案 【免费下载链接】video-subtitle-remover 基于AI的图片/视频硬字幕去除、文本水印去除,无损分辨率生成去字幕、去水印后的图片/视频文件。无需申请第三方API,本地实现。A…...

3步搞定小红书无水印下载:XHS-Downloader开源神器实战全解析

3步搞定小红书无水印下载:XHS-Downloader开源神器实战全解析 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链…...

告别ArcGIS依赖!用QGIS 3.28把SHP属性表一键导出Excel,附赠3个数据清洗小技巧

告别ArcGIS依赖!用QGIS 3.28高效导出SHP属性表到Excel的完整指南 当你在处理地理空间数据时,是否曾因ArcGIS的复杂操作或高昂成本而感到困扰?QGIS作为一款开源GIS软件,不仅完全免费,还能轻松完成从基础到高级的空间数据…...

CDA Level-2 考试全攻略:从报名到备考的保姆级教程(含最新题库资源)

CDA Level-2 考试全攻略:从报名到备考的保姆级教程 最近两年数据分析师认证热度持续攀升,CDA认证作为国内认可度较高的专业证书之一,Level-2考试通过率常年维持在40%左右。不同于Level-1的基础考核,Level-2更注重实际分析能力与统…...

CherryStudio+Obsidian联动指南:如何让本地笔记成为大模型的长期记忆?

CherryStudio与Obsidian深度整合:构建AI可理解的长期记忆系统 在信息爆炸的时代,我们每天都在产生大量笔记和知识片段,但这些内容往往沉睡在本地文件中,无法与智能工具形成有效互动。Obsidian以其独特的网状笔记结构和本地Markdow…...

ABAP邮件发送实战:如何在SAP中优雅地嵌入表格并添加附件(附完整代码)

ABAP邮件发送实战:如何在SAP中优雅地嵌入表格并添加附件(附完整代码) 在SAP系统的日常开发中,邮件发送功能几乎是每个ABAP开发者都会遇到的需求场景。无论是定期发送业务报表、异常数据提醒,还是系统自动通知&#xff…...

JSP 语法详解

JSP 语法详解 引言 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在网页中嵌入Java代码,以实现与数据库的交互和动态内容生成。JSP语法简洁明了,易于学习和使用。本文将详细介绍JSP的语法结构,帮助读者更好地理解和应用JSP技术。 JSP基本语法 1. JSP页面结构…...

LangChain实战:如何用ConversationalRetrievalQA构建带记忆的智能问答系统(附完整代码)

LangChain实战:构建带记忆的智能问答系统全流程解析 在当今AI应用开发领域,对话系统的"记忆力"已成为衡量其智能水平的关键指标。想象一下,当用户第三次询问"刚才提到的方案有哪些优势"时,如果AI回答"您…...

如何写出高效的大模型提示词

大模型提示词编写的核心在于通过清晰、结构化的指令引导模型精准理解并执行任务。其技巧与最佳实践可归纳为明确任务目标、提供充分背景与约束、优化指令结构、以及利用先进框架与迭代优化。下表总结了关键要素与具体策略: 核心要素描述与目的具体实践与技巧角色 (…...

深入SimpleFOC源码:为什么校准编码器时要将磁场固定在270度?一个硬件角度的解读

深入SimpleFOC源码:为什么校准编码器时要将磁场固定在270度?一个硬件角度的解读 当你第一次接触SimpleFOC库的编码器校准代码时,可能会对其中将电角度锁定在270度(_3PI_2)的操作感到困惑。这个看似随意的"魔法数字…...

基于Xilinx Artix-7的JPEG2000图像无损压缩系统:完整工程与独立模块化设计

JPEG2000 图像无损压缩算法 FPGA第三方IP JPEG2K是基于xilinx Artix-7的FPGA完整工程,内有完整的MATLB算法工程和RTL源代码,还有详细的文档 JPEG2000压缩系统部分由6个独立模块组成:去马赛克模块、伽马校正模块、分量间变换模块、小波变换模…...

从SAP实施到微信上线:一文读懂不同类型软件公司的实施岗到底有啥区别

从SAP实施到微信上线:一文读懂不同类型软件公司的实施岗核心差异 刚入行的技术新人小张最近很困惑:同样是"软件实施工程师"岗位,为什么招聘JD里有的要求精通SAP模块配置,有的却强调微信生态部署经验?在面试了…...

小智AI固件开发者的福音:VSCode插件一键搞定ESP-IDF v5.4环境(Windows/Linux通用)

小智AI固件开发者的福音:VSCode插件一键搞定ESP-IDF v5.4环境(Windows/Linux通用) 在物联网开发领域,ESP32系列芯片凭借其优异的性能和丰富的功能,已经成为智能硬件开发的首选平台之一。而作为ESP32官方推荐的开发框架…...

2026最权威的AI科研神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术环境当中,把论文AI网站进行高效利用,已然成为了研究者去…...

NoFences:免费开源桌面分区管理工具,告别杂乱桌面,提升工作效率50%

NoFences:免费开源桌面分区管理工具,告别杂乱桌面,提升工作效率50% 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 想要告别杂乱无章的Win…...

三维建模师必看:Blender中坐标变换的数学原理与操作技巧

三维建模师必看:Blender中坐标变换的数学原理与操作技巧 在Blender的世界里,每个顶点、每条边、每个面都在三维空间中占据着精确的位置。当我们移动一个物体、缩放一个模型或旋转一个摄像机时,背后是一套精密的数学机制在运作。对于艺术背景的…...

拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略

拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox QRazyBox是一款专业的二维码分析与恢复工具包(QR Code Analysis …...

解决Python文件路径超长问题:Windows系统下的终极指南

解决Python文件路径超长问题:Windows系统下的终极指南 在Windows平台上开发Python应用时,文件路径长度限制是个令人头疼的"历史遗留问题"。记得第一次接手一个大型Python项目时,我花了整整两天时间才搞明白为什么某些文件总是无法读…...

OpenClaw技能组合:Qwen3-4B串联多个自动化模块完成复杂任务

OpenClaw技能组合:Qwen3-4B串联多个自动化模块完成复杂任务 1. 为什么需要技能组合? 去年我接手了一个数据分析项目,需要每周从三个不同来源收集数据,清洗后生成可视化报告。最初我手动执行这些步骤,每次耗时近3小时…...

避坑指南:Android 10分区存储下File API失效的5种替代方案

Android 10分区存储适配实战:5种File API替代方案详解 当你的应用在Android 10设备上突然开始崩溃,控制台不断抛出"File.mkdir() failed: EACCES (Permission denied)"之类的错误时,作为开发者可能会感到措手不及。这正是分区存储&…...

FedProx实战:如何用Python在异构网络中优化联邦学习(附代码)

FedProx实战:Python实现异构网络联邦学习优化指南 联邦学习作为分布式机器学习的前沿分支,正面临两大核心挑战:设备间的系统异构性(计算与通信能力差异)和数据分布的统计异构性(non-IID数据)。本…...

解锁论文写作新姿势:书匠策AI,你的期刊论文智囊团

在学术的浩瀚海洋中,每一位探索者都渴望拥有一盏明灯,照亮前行的道路。对于广大教育领域的学者、研究生乃至本科生而言,撰写一篇高质量的期刊论文不仅是学术能力的体现,更是通往更高学术殿堂的钥匙。然而,面对繁琐的选…...

Win10主机与Win7虚拟机共享文件夹超详细指南(VMware/虚拟机新手必看)

Win10主机与Win7虚拟机无缝共享文件夹全流程解析 刚接触虚拟机的用户经常会遇到一个棘手问题:如何在主机和虚拟机之间高效传输文件?复制粘贴受限、U盘来回插拔效率低下,而共享文件夹功能正是解决这一痛点的最佳方案。本文将手把手带你完成从零…...

别再让你的Druid监控裸奔了!手把手教你配置账户密码与访问控制

Druid监控安全加固实战:从零构建企业级防护体系 在Java生态中,Druid作为阿里巴巴开源的数据库连接池,凭借其强大的监控功能成为众多企业的标配组件。但令人担忧的是,超过60%的生产环境存在Druid监控页面暴露的安全隐患——这相当于…...

2026年最好的AI创业机会,就藏在你压根看不上的角落里

还在焦虑AI会替代你?抢你饭碗?你根本不知道,现在有一群人,正在用AI给自己“印钞票”他们不是搞什么ChatGPT插件,也不是训练大模型,他们就盯着那些看着不起眼,甚至你压根看不上的小事。利用这些小…...