写爬虫遇到 AES 加密参数
本次涉及三个网站:分别以编号 1 2 3 表示,文中所有 1 2 3 分别代表三个网站
1:https://www.jidaihome.com
2. http://www.qhce.gov.cn/login.jsp
3:升学e网通-高中生在线学习一站式平台
通过分析网站得知:
1:填充方式为 Pkcs7; 加密模式为 CBC, 返回结果需 base64编码
2:填充方式为 ZeroPadding; 加密模式为 CBC, 返回结果需 base64编码
3:填充方式为 Pkcs7; 加密模式为 CBC, 返回结果需 先转为16进制,在解码,然后全部转为大写
补全方法:
Pkcs7、 PKCS5Padding:填充的原则是,如果长度少于16个字节,需要补满16个字节,补(16-len)个(16-len)例如:
123这个节符串是3个字节,16-3= 13,补满后如:123+13个十进制的13
pad = lambda s: s + (16 - len(s)%16) * chr(16 - len(s)%16) # aes补全类型为 Pkcs7 时 需要 先进行补全
# aes补全类型为 ZeroPadding 时 需要 先进行补全
def add_to_16(s):
while len(s) % 16 != 0:
s += '\0'
return s # 返回bytes
js代码里会显示:
3: t.Encrypt = function(e) {
var t = n["default"].enc.Utf8.parse(e);
return n["default"].AES.encrypt(t, i, {
iv: o,
mode: n["default"].mode.CBC,
padding: n["default"].pad.Pkcs7
}).ciphertext.toString().toUpperCase()
}
},
1: t.aesEncrypt = function(t, e) {
var r = i.enc.Utf8.parse(e)
, n = i.enc.Utf8.parse(t);
return i.AES.encrypt(n, r, {
iv: i.enc.Utf8.parse("0102030405060708"),
mode: i.mode.CBC,
padding: i.pad.Pkcs7
}).toString()
}
# 注
不知道加密对不对可以在 在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网 (一个在线加密解密网站)里带入key,vi, 加密模式, 补全模式,需加密数据,选择加密后数据返回格式看看和网页上所显示是否一样
python代码实现:
代码如下:注释中 1 2 3 分别代表三个网站
# coding=utf-8
import binascii
import hashlib, base64, math
import random
from binascii import b2a_hex, a2b_hex
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
import warnings
warnings.filterwarnings("ignore")def hash_jia_mi(one_record):'''md5 加密后 可以 降低内存'''hs = hashlib.md5()hs.update(one_record.encode("utf8"))result = hs.hexdigest()# print(result)return resultdef base64_jia_mi(a):result = base64.b64encode(a.encode('utf-8'))# print(str(result, 'utf-8'))return str(result, 'utf-8')def base64_jie_mi(a):result = base64.b64decode(a.encode('utf-8'))# print(str(result, 'utf-8'))return str(result, 'utf-8')def get_r(t):e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="i = ""r = 0while r < t:n = math.floor(random.random() * len(e))i += e[n]r += 1# print('i = ', i)return i# aes补全类型为 ZeroPadding 时 需要 先进行补全
def add_to_16(s):while len(s) % 16 != 0:s += '\0'return s # 返回bytesdef AES_Encrypt(key, data): # 返回 最终 request payload 数据# vi = '0102030405060708' # # 偏移量 --> 1 网站编号,下同# vi = '2017110912453698' # 偏移量 --> 3vi = '1234567812345678' # 偏移量 --> 2pad = lambda s: s + (16 - len(s)%16) * chr(16 - len(s)%16) # aes补全类型为 Pkcs7 时 需要 先进行补全print('pad = ', pad)# data = pad(data)data = add_to_16(data)print('data = ', data)# 字符串补位cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))# print(cipher)# 加密结果encryptedbytes = cipher.encrypt(data.encode('utf-8')) # # 加密后得到的是bytes类型的数据# 最终返回数据# --> 3 先转为16进制,在解码,然后全部转为大写enctext = b2a_hex(encryptedbytes).decode().upper()# --> 1 先转为16进制,在解码,然后全部转为大写encodestrs = base64.b64encode(encryptedbytes) # str yong base64加密后显示enctext = encodestrs.decode('utf8') # 使用Base64进行编码,返回byte字符串# --> 2 先转为16进制,在解码,然后全部转为大写encodestrs = base64.b64encode(encryptedbytes) # str yong base64加密后显示enctext = encodestrs.decode('utf8') # 使用Base64进行编码,返回byte字符串print('enctext = ', enctext)# 对byte字符串按utf-8进行解码return enctext# k = get_r(16) # 密钥 --> 1
# k = '20171109124536982017110912453698' # 密钥 --> 3
k = '1234567812345678' # 密钥 --> 2# data = {"mobile": "%s" % phone, "password": "%s" % hash_jia_mi(pwd)} # 需要加密的数据 --> 1
# data = '666666' # 需要加密的数据 --> 3
data = 'yin1112324' # 需要加密的数据 --> 2request_payload = AES_Encrypt(k, data) # 调用方法,传入 key(密钥) 和 需要加密的数据
# 注意
需注意对应模式及补全方法及加密后返回格式,否则结果不正确
写爬虫遇到 AES 加密参数相关推荐
- 爬虫之js加密参数破解练习-百度指数爬虫(附完整源码)
百度指数爬虫 前言 分析 查看响应体 找到加密的代码块 python实现解密过程 完整代码 前言 完整源码如因环境问题无法运行(没有安装node环境),将解密部分换成python(已在博客中附上)即可 ...
- 爬虫之js加密参数破解步骤分析-百度翻译移动版sign值的获取
百度翻译sign值的获取 前言语 请求参数分析 动态分析参数生成方式 定位参数生成的位置 断点调试 使用python生成sign 第一种方式-读懂js代码,翻译成python 使用执行js的包 前言语 ...
- python爬虫:关于解决request.get和点击查看网页源代码的内容不同的问题//及大神版js加密参数获取教程指路
首先声明:爬虫小白,虽然爬过几个网站,但是知识几乎都是实践中获取,如果以下说的不对的,请多指正,谢谢!谨此给和我一样的小白提供一个解题思路! 目录 问题背景 菜鸡版解决方案 大神版js加密参数获取教程 ...
- 当你写爬虫遇到APP的请求有加密参数时该怎么办?【初级篇-秒杀模式】
文章转载自公众号小周码字 看完了初级篇的常规模式之后,你是不是发现了一个很严重的问题:如果每个APP都需要这么反编译看代码仿写的话,那么当想要大批量爬不同的APP的时候,光是找加密参数的生成部分就已经 ...
- python爬虫应用实例_Python爬虫进阶必备 | 一个典型的 AES 加密在爬虫中的应用案例...
一个典型的AES案例 AES 的案例之前有推荐大家关于 AES 加密的案例文章,不少朋友问我加密解决了有什么用? 最大的用途当然就是不用模拟请求,大大提高了爬取效率. 可能之前举例都是使用的 AES ...
- Python爬虫:逆向分析某云音乐加密参数
文章目录 前言 1. 请求分析 2. 参数分析 3. 加密分析 4. 模拟加密 5. 获取ID 6. 代码框架 结束语 前言 免责声明: 本篇博文的初衷是分享自己学习逆向分析时的个人感悟, ...
- Python爬虫:爬取instagram,破解js加密参数
Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...
- 爬虫破解js加密破解(二) 有道词典js加密参数 sign破解
在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术. 常见的反爬虫技术有封ip,user_agent,字体库,js加密, ...
- python爬虫js逆向加密,Web爬虫处理参数js加密、js混淆、js逆向
中国空气质量在线监测平台(https://www.aqistudy.cn/html/city_detail.html)在众多的练习中,关闭了前台数据信息的展示,也就是说现在网页是这样的: 但我们主要学 ...
最新文章
- Ubuntu环境变量
- 界面编程与视图(View)组件
- windows 2008+Oracle 11g R2 故障转移群集配置
- ASP.NET服务器控件的生命周期分析
- 麒麟970怎么升级鸿蒙系统,华为这些手机无法升级鸿蒙系统,搭载麒麟970,只能遗憾错过...
- HADOOP都升级到2.5啦~~~
- 组合破解windows域账号
- html5 clip,canvas中使用clip()函数裁剪方法
- jetty java web_i-jetty 下的JavaWeb开发(一)
- Java多线程——同步问题
- 关于Android 的内存泄露及分析
- 《Java 学习笔记》 第剩余章节阅读体验附书评。
- 帆软自定义登录html,自定义登陆界面- FineReport帮助文档|报表开发|报表使用|学习教程...
- Jsp生成静态页面(转)
- 3G模块驱动运用开发总结
- html中input中加图片,css怎么在input中插图片
- 病毒木马查杀实战第024篇:MBR病毒之编程解析引导区
- Talent Plan TinyKV Project1 StandaloneKV
- 鸢尾花种类预测(案例)
- BEVFusion(北大阿里)环境搭建教程
热门文章
- 卢氏黎明计算机学校,卢氏老井
- 《微图4.0》升级更新
- 我的世界国际版仿java版材质包_我的世界国际版如何更换材质包和光影
- Julia 基于Flux深度学习框架的cifar10数据集分类
- 最新乐购社区源码全新版本V1.9
- Oracle账号过期、被锁
- C# 手动实现UrlEncode(查看微软底层代码整理)
- 【Rust日报】2020-08-09:1Paasword Linux版本
- 天猫魔盒显示服务器出现故障,天猫魔盒账号基础服务不存在怎么回事?
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!