T21摘要算法-哈希值挑战

一:抓包分析

image-20260511110418310

打开控制台,翻页后看到请求体的加密参数,sign和code

直接全局搜sign=,找到加密点,当然也能搜索sign一个一个去判断

image-20260511110659051

image-20260511110823692

能看到实际code和sign都是从o里获得,o为r(n,s,a)函数生成,看o的调用能看出,一个是sha256加密,一个是sha3_256加密,进去r函数打断点

image-20260511111327749

能看到s为页码+hash_challenge(固定值)+时间戳、o为固定值

直接网上找到sha256和sha3_256看看是否一致

image-20260511111802720

image-20260511111816188

image-20260511111842346

能看出来一致,直接编码

二:编码与验证

调用sha256和sha3_256直接使用python库hashlib

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import hashlib

def sha256_hash(data) -> str:
"""返回数据的 SHA-256 十六进制字符串"""
if isinstance(data, str):
data = data.encode('utf-8')
return hashlib.sha256(data).hexdigest()


def sha3_256_hash(data) -> str:
"""返回数据的 SHA3-256 十六进制字符串"""
if isinstance(data, str):
data = data.encode('utf-8')
return hashlib.sha3_256(data).hexdigest()

image-20260511114455366

能看到调用结果一致

image-20260511130510695

请求调用发现报错:

image-20260511130536061

发现headers里还有两个加密参数

image-20260511130617643

也就是一个md5一个hmac加密

image-20260511130732707

同理python实现当前加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def md5_hash(data: Union[bytes, str]) -> str:
"""
计算 MD5 哈希值。
参数:
data: 字符串或字节串
返回:
十六进制字符串表示的 MD5 值
"""
if isinstance(data, str):
data = data.encode('utf-8')
return hashlib.md5(data).hexdigest()


# 如果需要支持其他哈希算法(如 SHA-256)的 HMAC,可以添加一个参数
def hmac_custom(key: Union[bytes, str], data: Union[bytes, str], algorithm=hashlib.sha256) -> str:
"""
使用指定哈希算法计算 HMAC。
参数:
key: 密钥
data: 消息
algorithm: 哈希构造函数(如 hashlib.sha256, hashlib.sha1 等)
返回:
十六进制字符串表示的 HMAC 值
"""
if isinstance(key, str):
key = key.encode('utf-8')
if isinstance(data, str):
data = data.encode('utf-8')
return hmac.new(key, data, algorithm).hexdigest()

强调一下,这里盐值有三个

image-20260511132542382

别搞一样了

image-20260511132609144

更多内容也在公众号更新:码字的秃猴

tuhou