本次涉及三个网站:分别以编号 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 加密参数相关推荐

  1. 爬虫之js加密参数破解练习-百度指数爬虫(附完整源码)

    百度指数爬虫 前言 分析 查看响应体 找到加密的代码块 python实现解密过程 完整代码 前言 完整源码如因环境问题无法运行(没有安装node环境),将解密部分换成python(已在博客中附上)即可 ...

  2. 爬虫之js加密参数破解步骤分析-百度翻译移动版sign值的获取

    百度翻译sign值的获取 前言语 请求参数分析 动态分析参数生成方式 定位参数生成的位置 断点调试 使用python生成sign 第一种方式-读懂js代码,翻译成python 使用执行js的包 前言语 ...

  3. python爬虫:关于解决request.get和点击查看网页源代码的内容不同的问题//及大神版js加密参数获取教程指路

    首先声明:爬虫小白,虽然爬过几个网站,但是知识几乎都是实践中获取,如果以下说的不对的,请多指正,谢谢!谨此给和我一样的小白提供一个解题思路! 目录 问题背景 菜鸡版解决方案 大神版js加密参数获取教程 ...

  4. 当你写爬虫遇到APP的请求有加密参数时该怎么办?【初级篇-秒杀模式】

    文章转载自公众号小周码字 看完了初级篇的常规模式之后,你是不是发现了一个很严重的问题:如果每个APP都需要这么反编译看代码仿写的话,那么当想要大批量爬不同的APP的时候,光是找加密参数的生成部分就已经 ...

  5. python爬虫应用实例_Python爬虫进阶必备 | 一个典型的 AES 加密在爬虫中的应用案例...

    一个典型的AES案例 AES 的案例之前有推荐大家关于 AES 加密的案例文章,不少朋友问我加密解决了有什么用? 最大的用途当然就是不用模拟请求,大大提高了爬取效率. 可能之前举例都是使用的 AES ...

  6. Python爬虫:逆向分析某云音乐加密参数

    文章目录 前言 1. 请求分析 2. 参数分析 3. 加密分析 4. 模拟加密 5. 获取ID 6. 代码框架 结束语 前言   免责声明:     本篇博文的初衷是分享自己学习逆向分析时的个人感悟, ...

  7. Python爬虫:爬取instagram,破解js加密参数

    Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...

  8. 爬虫破解js加密破解(二) 有道词典js加密参数 sign破解

    在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术. 常见的反爬虫技术有封ip,user_agent,字体库,js加密, ...

  9. python爬虫js逆向加密,Web爬虫处理参数js加密、js混淆、js逆向

    中国空气质量在线监测平台(https://www.aqistudy.cn/html/city_detail.html)在众多的练习中,关闭了前台数据信息的展示,也就是说现在网页是这样的: 但我们主要学 ...

最新文章

  1. Ubuntu环境变量
  2. 界面编程与视图(View)组件
  3. windows 2008+Oracle 11g R2 故障转移群集配置
  4. ASP.NET服务器控件的生命周期分析
  5. 麒麟970怎么升级鸿蒙系统,华为这些手机无法升级鸿蒙系统,搭载麒麟970,只能遗憾错过...
  6. HADOOP都升级到2.5啦~~~
  7. 组合破解windows域账号
  8. html5 clip,canvas中使用clip()函数裁剪方法
  9. jetty java web_i-jetty 下的JavaWeb开发(一)
  10. Java多线程——同步问题
  11. 关于Android 的内存泄露及分析
  12. 《Java 学习笔记》 第剩余章节阅读体验附书评。
  13. 帆软自定义登录html,自定义登陆界面- FineReport帮助文档|报表开发|报表使用|学习教程...
  14. Jsp生成静态页面(转)
  15. 3G模块驱动运用开发总结
  16. html中input中加图片,css怎么在input中插图片
  17. 病毒木马查杀实战第024篇:MBR病毒之编程解析引导区
  18. Talent Plan TinyKV Project1 StandaloneKV
  19. 鸢尾花种类预测(案例)
  20. BEVFusion(北大阿里)环境搭建教程

热门文章

  1. 卢氏黎明计算机学校,卢氏老井
  2. 《微图4.0》升级更新
  3. 我的世界国际版仿java版材质包_我的世界国际版如何更换材质包和光影
  4. Julia 基于Flux深度学习框架的cifar10数据集分类
  5. 最新乐购社区源码全新版本V1.9
  6. Oracle账号过期、被锁
  7. C# 手动实现UrlEncode(查看微软底层代码整理)
  8. 【Rust日报】2020-08-09:1Paasword Linux版本
  9. 天猫魔盒显示服务器出现故障,天猫魔盒账号基础服务不存在怎么回事?
  10. Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!