Python反反爬系列(四)----前端JS进行AES加密,Python解密
将6位或者7位数字加密成22位数字字母大小写的加密方法。
采集数据时,遇到对Url进行加密的网站,大致加密情形如下
1.编译加密前的url
在列表页的url如下
2.加密后的Url
除了端口这块没了,还有就是其他地方也变了
3.仔细观察参数变化:
4.第一步先初略过一遍所有的Js文件,排除后确定加密文件为下图的jquery.lyh-1.1.0.js
5.第二步查看js作用,
emmmmm,看了下,还是放弃吧,看不懂。。。复制一段代码网上查看,看到博客 https://www.cnblogs.com/libo0125ok/p/7668026.html
前端实现部分代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试加密</title><script src="./files/jquery.min.js"></script><script src="./files/jquery.cookie.js"></script><script src="./files/jquery.hiSlider.js"></script><script src="aes.min.js"></script>
</head>
<body><script>/*** 加密(需要先加载lib/aes/aes.min.js文件)* @param word* @returns {*}*/function encrypt(word){var key = CryptoJS.enc.Utf8.parse("qnbyzzwmdgghmcnm");var srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES. encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});//加密方法加密console.log("加密结果揭晓阶段:");console.log("解密结果:",encrypted.toString().slice(0,22));alert(encrypted.toString().slice(0,22));return encrypted.toString(); //返回加密结果}/*** 解密* @param word* @returns {*}*/function decrypt(word){var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12");var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Utf8.stringify(decrypt).toString();}</script><input type="button" onclick="encrypt(3187083)" value="点击测试加密效果">
</body>
</html>
结果
发现加密出的数据和我们要的很像,emmmm,就是一样的,抱歉我提前用了加密参数了。。。
确定了网站对数据的加密方式就是Aes,那么接下来就是借助Python复写实现解密了。
但是前提是我们找到了这个加密参数,就是参数key
6.第三步:js打断点
一直调的话就会出现参数
7.Python代码实现
# -*- coding: UTF-8 -*-
'''
@Author :Jason
'''
from Crypto.Cipher import AES
import base64
import reclass Decrypt(object):def process_num_url(self,partUrl):while len(partUrl) % 16 != 0:#whilepartUrl += (16-len(partUrl) % 16) * chr(16-len(partUrl)%16)return str.encode(partUrl)def encrypt_num_url(self,partUrl,key):aes = AES.new(str.encode(key), AES.MODE_ECB)encrypted_partUrl = str(base64.encodebytes(aes.encrypt(self.process_num_url(partUrl))), encoding='utf8').replace('\n', '') # 加密process_encrypted_partUrl = encrypted_partUrl.replace('/', "^")return process_encrypted_partUrl[:-2]def get_partUrl(self,url):need_url = re.findall(r'/(\d+)\.jhtml',url)if need_url:return need_url[0]else:return ""def encrypt_fullUrl(self,partUrl,url,encryptedpartUrl):return url.replace(str(partUrl),str(encryptedpartUrl))def main(self,url,key):partUrl = self.get_partUrl(url=url)encryptedpartUrl = self.encrypt_num_url(partUrl,key)encryptedfullUrl = self.encrypt_fullUrl(partUrl,url,encryptedpartUrl)print(encryptedfullUrl)if __name__ == "__main__":url = "http://ggzyjy.shandong.gov.cn:80/jsgczbgg/3186567.jhtml?type=1" # 原始链接key = "qnbyzzwmdgghmcnm" # 加密参数decrypt = Decrypt()decrypt.main(url,key)
解决:
参考
https://blog.csdn.net/hh775313602/article/details/78991340
https://www.cnblogs.com/libo0125ok/p/7668026.
html https://blog.csdn.net/qq_43500579/article/details/97615479
Python反反爬系列(四)----前端JS进行AES加密,Python解密相关推荐
- vue中使用js进行AES加密及解密(含密钥和iv偏移量)、以及HMAC-SHA256加密方法对于签名加密的使用
一.AES加密解密 1.下载安装 npm install crypto-js --save-dev 2.在utils文件夹下创建encryp.js文件进行aes加密解密工具类方法的封装 import ...
- python实现字母的加密和解密 字典_python实现AES加密与解密
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...
- aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例
本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...
- 记一次js文件AES加密的key与iv逆向分析
文章目录 前言 一.AES算法介绍 二.js文件代码 1.util.js文件 2.aes.js文件 三.代码分析 1.分析加密调用及过程 2. 分析e(key),n(iv)生成的过程 总结 前言 最近 ...
- java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例
前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...
- 爬虫笔记41之反爬系列四:字体反爬、JS反爬
一.字体反爬 1.什么是字体反爬? 开发者创作了一种字体(字体代号):网页中显示的就是这种字体代号. 字体反爬也叫CSS反爬,就是因为这个字体是隐藏在我们css文件当中的一个.ttf文件. 2.如何 ...
- 反反爬须知:AES加密和解密
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.AES加密两种模式 二.分析 总结 参考文档 相关案例 前言 提示:这里可以添加本文要记录的大概内容: 只有从正向 ...
- Python界面编程第十四课:Pyside2 (Qt For Python)使用Calendar创建日历
QCalendar 是什么? QCalendar对象使用特定系统规则将年.月和日映射到特定的日期(最终由它的Julian天数标识). 默认的QCalendar() 是一个扩展的Gregorian日历, ...
- 【Python之旅】第四篇(二):Python异常处理与异常捕捉
在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些 ...
最新文章
- boost.asio系列——socket编程
- Xamarin for iOS 11(一) - 初尝ARKit
- linux IP 设置
- 中值滤波_图像处理之低通滤波
- PATB 1019. 数字黑洞 (20)
- 【CSS】CSS怎么设置小于12px的字体 浏览器限制最小字体大小解决方法
- 航天宏图PIE-SAR软件高分3数据预处理流程
- 在计算机检索中 有哪些方法能缩小,使用“或OR”运算将同义词连接起来可以缩小检索。()...
- C语言进阶(一):宏函数内定义结构体
- TensorFlow Serving Introduction
- 吴裕雄--天生自然 诗经:琵琶行
- ZigBee的发展也有“碎片化”
- Hadoop 基本常用命令
- [小知识] Copyright该如何写?
- NOI题库答案 (1.7 字符串基础)(1-20)
- VR专业的面试题你都见过没?相信我绝对有用
- fax T30 T38协议二进制分析
- OpenCV 图像/视频 读取 显示
- EPIC 创建DMEEX付款结构
- win 8 找回开始菜单