How to use crypto?
爬虫逆向笔记:Crypto-JS 加密库深度解析
1. 什么是 Crypto-JS?
Crypto-JS 是一款极其流行的 JavaScript 纯算法加密库,在网页前端开发中广泛用于保护敏感数据。对于爬虫工程师而言,掌握它是破解 API 请求参数、Cookie 校验及返回数据解密的核心关键。
2. 核心模块与功能
爬虫逆向场景中,高频接触的功能可分为四类:
① 散列 / 哈希 (Hashes)
- 特点:不可逆(仅能从明文生成密文,无法反推原文)。
- 用途:生成数据 “指纹”、请求签名(Sign)。
- 常见算法:MD5(32 位字符)、SHA-1、SHA-256。
② 对称加密 (Ciphers)
- 特点:可逆(支持加密 / 解密),加解密使用同一套密钥。
- 用途:处理完整请求体、解密返回的密文数据。
- 核心算法:AES(最常用)、DES、TripleDES、RC4。
③ 模式与填充 (Modes and Padding)
对称加密(如 AES)的附属配置,配置不一致会导致解密必报错:
- Mode (模式):
- CBC:最常用,需搭配 IV(偏移量);
- ECB:简单模式,无需 IV(安全性较低)。
- Padding (填充):Pkcs7、ZeroPadding 等(前端常用 Pkcs7)。
④ 编码 (Encoders)
- 用途:将加密后的二进制结果转换为可读字符串。
- 常见格式:Base64、Hex(十六进制)、Utf8。
3. 爬虫实战:AES 解密代码模板
逆向 “深证信”“巨潮” 等平台时,标准 AES 解密逻辑如下:
javascript 运行
1 | // 1. 引入库 (需先执行 npm install crypto-js) |
4. 逆向寻找 Key 的技巧
面对混淆的 decode.js 等文件,定位加密参数的核心方法:
① 全局搜索关键字
在 Chrome DevTools (F12) 搜索:AES.encrypt、AES.decrypt、CryptoJS,快速定位加密逻辑位置。
② 断点调试 (Breakpoint)
- 找到加密函数调用处打断点;
- 查看变量:形如
_0x45a2b1的混淆变量,若值为 16/32 位字符串,大概率是 Key/IV; - 跟踪变量赋值链路,确认最终的密钥原文。
③ 注意编码细节
网页代码常使用 CryptoJS.enc.Utf8.parse("xxx") 处理密钥,本地模拟时不能直接传字符串,必须先转为字数组(与网页逻辑一致)。
5. 环境准备
本地运行 Node.js 脚本前,需安装依赖:
bash 运行
1 | # 进入项目目录执行 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Chu_Yu-blog!





