前端加密与Python逆向实战:HMAC-SHA1算法分析与数据抓取
引言
在现代Web开发中,前端加密技术被广泛应用于API接口的安全防护。本文将深入分析一个基于CryptoJS的HMAC-SHA1加密案例,并展示如何通过Python完整还原加密过程,实现自动化数据抓取。
一、JavaScript加密机制解析
1. 核心加密函数分析
const CryptoJS = require('crypto-js')
function decrypt123(){
// 获取当前时间戳
var f = (new Date)['getTime']()
// 将时间戳进行Base64编码
tt = btoa(f)
// 使用HMAC-SHA1算法生成签名
m = CryptoJS["HmacSHA1"]('9527' + f, "xxxooo")["toString"]()
return {"m": m, "tt": tt}
}
加密流程解析:
-
时间戳获取:使用
Date.getTime()
获取当前毫秒级时间戳 -
Base64编码:通过
btoa()
将时间戳编码为Base64字符串(tt参数) -
HMAC-SHA1签名:使用固定字符串"9527"拼接时间戳,以"xxxooo"为密钥生成签名(m参数)
2. 加密参数特点
参数 | 生成方式 | 作用 |
---|---|---|
tt |
时间戳Base64 | 请求时效验证 |
m |
HMAC-SHA1签名 | 请求合法性验证 |
二、Python逆向实现
1. 环境准备
import requests
import json
import execjs
import base64
import hmac
import hashlib
2. JavaScript执行环境配置
with open('demo.js', 'r', encoding="utf-8") as f:
js_code = f.read()
ctx = execjs.compile(js_code)
3. 纯Python实现加密
def python_decrypt123():
# 获取时间戳
timestamp = int(time.time() * 1000)
# Base64编码
tt = base64.b64encode