将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解密相关推荐

  1. vue中使用js进行AES加密及解密(含密钥和iv偏移量)、以及HMAC-SHA256加密方法对于签名加密的使用

    一.AES加密解密 1.下载安装 npm install crypto-js --save-dev 2.在utils文件夹下创建encryp.js文件进行aes加密解密工具类方法的封装 import ...

  2. python实现字母的加密和解密 字典_python实现AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  3. aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例

    本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...

  4. 记一次js文件AES加密的key与iv逆向分析

    文章目录 前言 一.AES算法介绍 二.js文件代码 1.util.js文件 2.aes.js文件 三.代码分析 1.分析加密调用及过程 2. 分析e(key),n(iv)生成的过程 总结 前言 最近 ...

  5. java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例

    前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...

  6. 爬虫笔记41之反爬系列四:字体反爬、JS反爬

    一.字体反爬 1.什么是字体反爬? 开发者创作了一种字体(字体代号):网页中显示的就是这种字体代号. 字体反爬也叫CSS反爬,就是因为这个字体是隐藏在我们css文件当中的一个.ttf文件. ​2.如何 ...

  7. 反反爬须知:AES加密和解密

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.AES加密两种模式 二.分析 总结 参考文档 相关案例 前言 提示:这里可以添加本文要记录的大概内容: 只有从正向 ...

  8. Python界面编程第十四课:Pyside2 (Qt For Python)使用Calendar创建日历

    QCalendar 是什么? QCalendar对象使用特定系统规则将年.月和日映射到特定的日期(最终由它的Julian天数标识). 默认的QCalendar() 是一个扩展的Gregorian日历, ...

  9. 【Python之旅】第四篇(二):Python异常处理与异常捕捉

    在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些 ...

最新文章

  1. boost.asio系列——socket编程
  2. Xamarin for iOS 11(一) - 初尝ARKit
  3. linux IP 设置
  4. 中值滤波_图像处理之低通滤波
  5. PATB 1019. 数字黑洞 (20)
  6. 【CSS】CSS怎么设置小于12px的字体 浏览器限制最小字体大小解决方法
  7. 航天宏图PIE-SAR软件高分3数据预处理流程
  8. 在计算机检索中 有哪些方法能缩小,使用“或OR”运算将同义词连接起来可以缩小检索。()...
  9. C语言进阶(一):宏函数内定义结构体
  10. TensorFlow Serving Introduction
  11. 吴裕雄--天生自然 诗经:琵琶行
  12. ZigBee的发展也有“碎片化”
  13. Hadoop 基本常用命令
  14. [小知识] Copyright该如何写?
  15. NOI题库答案 (1.7 字符串基础)(1-20)
  16. VR专业的面试题你都见过没?相信我绝对有用
  17. fax T30 T38协议二进制分析
  18. OpenCV 图像/视频 读取 显示
  19. EPIC 创建DMEEX付款结构
  20. win 8 找回开始菜单

热门文章

  1. SCARA机器人在螺丝锁付机中的应用
  2. iOS 中隐藏UITableView最后一条分隔线
  3. css3动画实现奔跑的火柴人
  4. COSCon‘22 第七届中国开源年会圆满落幕
  5. Monaco Editor教程(十六):缩略图minimap的配置详解
  6. Win32API 枚举出当前正在运行的进程
  7. PLSQL Developer工具介绍与基本使用
  8. ftp 两种登陆方式,及区别
  9. 怎么把群晖个人用户空间相片映射到公共空间/photo
  10. 反转(reverse)