Python爬虫进阶必备 | 一个典型的 AES 加密在爬虫中的应用案例
- 2019 年 10 月 31 日
- 筆記

一个典型的AES案例
AES 的案例之前有推荐大家关于 AES 加密的案例文章,不少朋友问我加密解决了有什么用?
最大的用途当然就是不用模拟请求,大大提高了爬取效率。
可能之前举例都是使用的 AES 加密的密码,所以不少朋友只关注了加密没注意实现后的用途,所以这次再写一个其他的 AES 加密作为示例。
这个例子来自 JS 逆向课程的预售群,偶然看到有群友提问,这里简单分析一下。
分析加密
抓包可以看到这里 data 部分是加密的。【图1-1】

直接搜索 data 这个加密参数可以看到有很多的相关项【图1-2】

那么如何快速定位这个加密内容解密的地方呢?
我们把请求返回的内容先美化一下,看看有没有什么点可以追踪一下。
可以看到在返回内容里和加密相关的字段有一个 isEncrypt
通过参数的名字我们可以猜测这个字段是用来标识内容是否加密。【图1-3】

我们检索这个字段看看有什么样的结果。【图1-4】

可以看到只有两个相关的内容,我们在第一个找到了解密相关的内容。【图1-5】

接下来就可以参考我前面的文章套路直接把关键的解密代码套进去就可以解密了。
可以直接套用 JS 的解密代码,也可以参考我们文章举例的 Python 代码
Python 复写加密
我们先把上次的 Python 代码 CV 过来。
import base64from Crypto.Cipher import AESimport random def pkcs7padding(text): """ 明文使用PKCS7填充 最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理 :param text: 待加密内容(明文) :return: """ bs = AES.block_size # 16 length = len(text) bytes_length = len(bytes(text, encoding='utf-8')) # tips:utf-8编码时,英文占1个byte,而中文占3个byte padding_size = length if(bytes_length == length) else bytes_length padding = bs - padding_size % bs # tips:chr(padding)看与其它语言的约定,有的会使用'